|
|
|
| Всем привет!
Подскажите, пожалуйста, как правильно составить простой код для подсчета символов в каждом слове одной строки.
Допустим в поле "text" есть строка из нескольких слов, разделенных пробелами. Чтобы посчитать количество всех символов в сроке (включая пробелы и знаки препинания) нужно сделать так:
if (strlen($_POST['text']) > 60)
{
exit ("<br><span class = 'ohibka'>Максимальное количество символов в заголовке - 60 знаков!</span>");
}
|
Но, как сделать подобный код, чтобы он подсчитывал и сравнивал с указанным значением (в нашем случае 60 знаков) количество знаков в каждом слове всей строки? Причем, нужно взять во внимание, что разделителем слов является только пробел.
Код должен вызывать остановку (как указано в примере), как только количество символов в слове больше указанного значения.
P.S. Надеюсь понятно изложил суть ... | |
|
|
|
|
|
|
|
для: sega_z
(10.01.2012 в 23:17)
| | можно начать отталкиваться от этого
<?php
$string = "Какая то строка с кучей слов";
/* разбиваем строку на отдельные слова
и получаем массив слов */
$str = explode(" ", $string);
/* в цикле обходим каждое слово отдельно и вычисляем его длину */
foreach($str as $value){
// тут проверять функцией strlen() значение $value
}
?>
|
вроде всё правильно, не проверял | |
|
|
|
|
|
|
|
для: sega_z
(10.01.2012 в 23:17)
| | Т.е. нужна длинна строки без учета пробелов? Тогда так:
if (strlen(str_replace(" ","",$_POST['text'])) > 60)
{
exit ("<br><span class = 'ohibka'>Максимальное количество символов в заголовке - 60 знаков!</span>");
}
| или нужна длина каждого слова отдельно? Тогда вариант Slo_Nik'а | |
|
|
|
|
|
|
|
для: Sfinks
(10.01.2012 в 23:29)
| | В том то и дело, что нужна длина каждого слова, отдельно. | |
|
|
|
|
|
|
|
для: sega_z
(10.01.2012 в 23:32)
| | попробуйте тот код, что я дал, должно быть всё нормльно | |
|
|
|
|
|
|
|
для: sega_z
(10.01.2012 в 23:32)
| |
<?php
$string = "Какая то строка с кучей слов";
$str = explode(" ", $string);
$error = false
foreach($str as $value){
if(strlen($value) > 60){
$error = true;
break;
}
}
if($error) die("Есть слова длиннее 60 знаков");
?>
|
| |
|
|
|
|
|
|
|
для: Sfinks
(10.01.2012 в 23:41)
| | Да, действительно, то что надо!
Но позвольте спросить, как добавить в разделители слов, помимо пробелов: запятые и точки? | |
|
|
|
|
|
|
|
для: sega_z
(10.01.2012 в 23:32)
| | Еще можно через РВ:
<?php
$s = "КороткоеСлово СуперДлинноеСловоЯвноДлиннееШестидесятиЗнаковХотяДляТогоЧтобыЕгоТакимСделатьНужноСильноПостараться ЕщеКороче";
$pattern = "#(\A|\s|\.|,)[^\Z\s\.,]{61,}#su";
if(preg_match($pattern,$s)) die("Есть слова длиннее 60 знаков");
else echo "OK";
?>
| Это если кодировка utf-8. Если win-1251, то в $pattern вместо #su надо написать #s
____
P.S. Поправил сразу для точек и запятых
P.P.S. Рекомендую именно этот вариант, т.к. циклы довольно медленны. | |
|
|
|
|
|
|
|
для: Sfinks
(10.01.2012 в 23:52)
| | А если в слове будут цифры? | |
|
|
|
|
|
|
|
для: sega_z
(10.01.2012 в 23:57)
| | А не должно быть? Вы уж сразу перечислите все условия? Тогда уж проще перечислить что может быть в словах.... Только буквы? Только русские или только латинские или любые? | |
|
|
|
|
|
|
|
для: Sfinks
(11.01.2012 в 00:02)
| | Да там всё что угодно может быть...
Ладно, воспользуюсь кодом с циклом, т.к нагрузка не большая, слов может быть не более 10. Тем более этому коду по барабану, что содержится в слове.
Всем участникам огромное спасибо!!! | |
|
|
|
|
|
|
|
для: sega_z
(11.01.2012 в 00:08)
| | А, ну раз все что угодно, то все нормально. Просто вы сначала сказали "только пробелы", потом "точки с запятыми", потом про цифры, вот я и подумал что нужно еще и цифры исключить. А так все нормально. Мой последний вариант исключает из слов точки, запятые и пробелы. Все остальное может быть. | |
|
|
|
|
|
|
|
для: sega_z
(10.01.2012 в 23:17)
| | Если я правильно понял Вашу задачу, я решил ее таким образом
<form method="post">
<input text="text" name="msg" value="<?php echo $_POST['msg'];?>">
<input type="submit" value="ok">
</form>
<?php
$f=explode(" ",$_POST['msg']);
$total=0;
for ($i=0;$i<count($f);$i++)
{
$subtotal=strlen($f[$i]);
$total=$total+$subtotal;
}
if ($total>7)
{
echo 'nekorrektnyu vod';
}
else
{
exit();
}
?> | |
|
|
|