Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подсчет количества символов в каждом слове строки
 
 автор: sega_z   (10.01.2012 в 23:17)   письмо автору
 
 

Всем привет!

Подскажите, пожалуйста, как правильно составить простой код для подсчета символов в каждом слове одной строки.

Допустим в поле "text" есть строка из нескольких слов, разделенных пробелами. Чтобы посчитать количество всех символов в сроке (включая пробелы и знаки препинания) нужно сделать так:


if (strlen($_POST['text']) > 60)
{
exit ("<br><span class = 'ohibka'>Максимальное количество символов в заголовке  - 60 знаков!</span>");
}


Но, как сделать подобный код, чтобы он подсчитывал и сравнивал с указанным значением (в нашем случае 60 знаков) количество знаков в каждом слове всей строки? Причем, нужно взять во внимание, что разделителем слов является только пробел.

Код должен вызывать остановку (как указано в примере), как только количество символов в слове больше указанного значения.

P.S. Надеюсь понятно изложил суть ...

  Ответить  
 
 автор: Slo_Nik   (10.01.2012 в 23:26)   письмо автору
 
   для: sega_z   (10.01.2012 в 23:17)
 

можно начать отталкиваться от этого

<?php 
$string 
"Какая то строка с кучей слов";
/* разбиваем строку на отдельные слова
    и получаем массив слов */
$str explode(" "$string);
/* в цикле обходим каждое слово отдельно и вычисляем его длину */
foreach($str as $value){
 
// тут проверять функцией strlen() значение $value 
}
?>

вроде всё правильно, не проверял

  Ответить  
 
 автор: Sfinks   (10.01.2012 в 23:29)   письмо автору
 
   для: sega_z   (10.01.2012 в 23:17)
 

Т.е. нужна длинна строки без учета пробелов? Тогда так:

if (strlen(str_replace(" ","",$_POST['text'])) > 60) 

exit ("<br><span class = 'ohibka'>Максимальное количество символов в заголовке  - 60 знаков!</span>"); 
}
или нужна длина каждого слова отдельно? Тогда вариант Slo_Nik'а

  Ответить  
 
 автор: sega_z   (10.01.2012 в 23:32)   письмо автору
 
   для: Sfinks   (10.01.2012 в 23:29)
 

В том то и дело, что нужна длина каждого слова, отдельно.

  Ответить  
 
 автор: Slo_Nik   (10.01.2012 в 23:33)   письмо автору
 
   для: sega_z   (10.01.2012 в 23:32)
 

попробуйте тот код, что я дал, должно быть всё нормльно

  Ответить  
 
 автор: Sfinks   (10.01.2012 в 23:41)   письмо автору
 
   для: 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 знаков");
?>

  Ответить  
 
 автор: sega_z   (10.01.2012 в 23:49)   письмо автору
 
   для: Sfinks   (10.01.2012 в 23:41)
 

Да, действительно, то что надо!

Но позвольте спросить, как добавить в разделители слов, помимо пробелов: запятые и точки?

  Ответить  
 
 автор: Sfinks   (10.01.2012 в 23:52)   письмо автору
 
   для: 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. Рекомендую именно этот вариант, т.к. циклы довольно медленны.

  Ответить  
 
 автор: sega_z   (10.01.2012 в 23:57)   письмо автору
 
   для: Sfinks   (10.01.2012 в 23:52)
 

А если в слове будут цифры?

  Ответить  
 
 автор: Sfinks   (11.01.2012 в 00:02)   письмо автору
 
   для: sega_z   (10.01.2012 в 23:57)
 

А не должно быть? Вы уж сразу перечислите все условия? Тогда уж проще перечислить что может быть в словах.... Только буквы? Только русские или только латинские или любые?

  Ответить  
 
 автор: sega_z   (11.01.2012 в 00:08)   письмо автору
 
   для: Sfinks   (11.01.2012 в 00:02)
 

Да там всё что угодно может быть...

Ладно, воспользуюсь кодом с циклом, т.к нагрузка не большая, слов может быть не более 10. Тем более этому коду по барабану, что содержится в слове.

Всем участникам огромное спасибо!!!

  Ответить  
 
 автор: Sfinks   (11.01.2012 в 00:52)   письмо автору
 
   для: sega_z   (11.01.2012 в 00:08)
 

А, ну раз все что угодно, то все нормально. Просто вы сначала сказали "только пробелы", потом "точки с запятыми", потом про цифры, вот я и подумал что нужно еще и цифры исключить. А так все нормально. Мой последний вариант исключает из слов точки, запятые и пробелы. Все остальное может быть.

  Ответить  
 
 автор: votush   (22.01.2012 в 15:17)   письмо автору
 
   для: 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();
}
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования