preg для длины слова в предложении

EugeneS

Новичок
preg для длины слова в предложении

и так ...
есть допустим предложение вводимое в форму ...
любое слово в этом предложении не должно быть более 35 символов иначе дизайн порвёт :)

Доп. условие:
само предложение целиком не должно быть более 400 символов ...

для длины предложения меня мало интересует но если получится объеденить эти два условия в один прег было бы здорово ...

и так ... для длины слова нужно что то вроде:
/[\w\W^\s]{,35}/

длина \w\W кроме пробела от 0 до 35
но что то это кроме и вообще всё не так как то :)

может есть какие то предложения кроме регэкспа и посимвольной проверки стринга в цикле со счётчиком ? :\
 

EugeneS

Новичок
мне не надо строку разрывать ... мне надо проверить нет ли слов в предложении длиннее 35 символов

что то вроде:

мне не надо строку разр
ывать


мне не надо :)
 

zarus

Хитрожопый макак
долго перебором
PHP:
$str = 'это длинная строка с длииииииииииииииbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbиииииииииииииииииииииииииннными словом';
if preg_match_all('/?:\s+|^)([^\s]{35,})(?:\s+|$)/msi',$str) {
  echo 'Эти пчелы делают неправильный мед!';
}
else {
  echo 'Какое огорчение...';
}
 

SaNo

Новичок
|\b[\w-]{35,}\b|

\b - метка (мнимый символ) конца или начала слова

ограничиваемся только буквами и дефисом

{35,} - 35 и более

в твоем шаблокне [\w\W^\s]
отрицание ^ работать не будет, в классах символов, оно должно стоять с самого начала и отрицать все, что идет за ним, т.е. либо все отрицай, либо ничего, третьего не дано
{,35} - такое не работет, см. выше

-~{}~ 30.11.05 17:09:

господа, слова могут разделяться не только пробельными символами, но еще и знаками препинания...

Удачи!
 

whirlwind

TDD infected, paranoid
PHP:
if (preg_match("/[^\s]{35,}/",$str) ){
  echo 'Eti pcheli delayut nepravilniy med!'; 
} 
else { 
  echo 'So sorry...'; 
}
 

zarus

Хитрожопый макак
Автор оригинала: SaNo
господа, слова могут разделяться не только пробельными символами, но еще и знаками препинания...
А вы думаете, что строка вида blabla,blabla длиной свыше допустимой будет корректно отображаться (читай, переноситься по строкам)?

-~{}~ 30.11.05 17:28:

Автор оригинала: whirlwind
PHP:
if (preg_match("/[^\s]{35,}/",$str) ){
  echo 'Eti pcheli delayut nepravilniy med!'; 
} 
else { 
  echo 'So sorry...'; 
}
Угу - так лучше, но я предпочитаю более жесткие проверки. Хоть это и медленнее, но мне так спокойнее.
 

whirlwind

TDD infected, paranoid
Что значит более жесткие проверки? Задача либо решена, либо нет. Если Вы про \w и \b так я бы не стал их использовать, т.к.

A \w matches a single alphanumeric character (an alphabetic character, or a decimal digit) or _, not a whole word. Use \w+ to match a string of Perl-identifier characters (which isn't the same as matching an English word). If use locale is in effect, the list of alphabetic characters generated by \w is taken from the current locale.

А если preg 100% компатибл с перлом, тогда регэксп еще короче

/[\S]{35,}/
 

SaNo

Новичок
Автор оригинала: zarus
А вы думаете, что строка вида blabla,blabla длиной свыше допустимой будет корректно отображаться (читай, переноситься по строкам)?
Вообще-то по !?- переносы осуществляются

-~{}~ 30.11.05 17:49:

Кстати модификаторы PCRE /m - многострочный поиск
/s - однострочный поиск , по сути выполняют противоположные задачи. Указывать их в одном шаблоне - неразумно.
 

zarus

Хитрожопый макак
Автор оригинала: whirlwind
A \w matches a single alphanumeric character (an alphabetic character, or a decimal digit) or _, not a whole word. Use \w+ to match a string of Perl-identifier characters (which isn't the same as matching an English word). If use locale is in effect, the list of alphabetic characters generated by \w is taken from the current locale.
\w не воспринимает кодировки, и работать не будет в большинстве случаев
\w = [a-zA-Z0-9] != [a-яА-Я]

-~{}~ 30.11.05 17:53:

Автор оригинала: SaNo
Вообще-то по !?- переносы осуществляются

-~{}~ 30.11.05 17:49:

Кстати модификаторы PCRE /m - многострочный поиск
/s - однострочный поиск , по сути выполняют противоположные задачи. Указывать их в одном шаблоне - неразумно.
Может быть и неразумно, но я пока не проверял быстродействие таких комбинаций. Если снижается - задумаюсь, если не снижается, то пусть живут.
 
Сверху