Regexp требует # непробельных символов - PullRequest
0 голосов
/ 20 июня 2009

У меня есть текстовая область. Я пытаюсь проверить, что он содержит как минимум 3 непробельных символа в javascript, и если это так, мне нужно перепроверить опубликованное сообщение в php.

Я думаю, что, как только я заработаю на php, я смогу использовать то же регулярное выражение для javascript. Тем не менее, пробелы запутались.

Я не понимаю, почему в php не работает следующее:

$msg = mysql_real_escape_string($_POST["msg"]);

if(!preg_match('/[\S]{3,}/',$msg)){
     echo 'too short';
}

Мне кажется, что для этого требуется как минимум 3 "непробельных символа". Однако, если я введу:

f f f

Оно говорит, что оно слишком короткое. И

f 

d

проходит. Я попытался добавить флаг "g" и поиграть с ^ и $, окружающими регулярное выражение.

Спасибо за любые советы

1 Ответ

1 голос
/ 20 июня 2009

Ваше регулярное выражение соответствует 3 последующих непробельных символов.

Следующее соответствует 3 непробельным символам, разделенным чем-либо:

/(\S.*){3,}/

Чтобы выполнить проверку по нескольким строкам, добавьте модификатор s:

/(\S.*){3,}/s

Вы также должны выполнить проверку до вызова mysql_real_escape_string. В вашем примере вторая строка преобразуется в f\r\nd или f\nd первой. Теперь он содержит 3 последующих непробельных символа! Как видите, это испортило проверку.

...