|
|
|
| Здравствуйте, уважаемые программисты && программистки!
Есть код:
<?php
if (!empty($_POST['ok'])) {
$message_user = htmlspecialchars($_POST['message_user']);
if (ereg("^\s*$", $message_user)) {
echo("Заполните поле.");
}
}
?>
<form action="./index.php" method="post">
<textarea name="message_user"></textarea>
<input type="submit" name="ok" value="ok">
</form>
|
Я ввожу в поле textarea много Enter`ов и отправляю форму.
Вопрос: почему не выводится сообщение "Заполните поле." ? Как мне известно, шаблон \s в регулярных выражениях обозначает любой пробельный символ, в том числе и символ новой строки \n, который я ввожу в textarea нажатием Enter. В чём я ошибся?
А вот такой вариант работает:
if (ereg("^[ \t\r\n]*$", $message_user)) {
|
| |
|
|
|
|
|
|
|
для: SilentChild
(15.03.2012 в 16:11)
| | вот не знаю что конкретно по вопросу ответить, вроде должно работать, но есть 2 НО!
1.
Внимание
С версии PHP 5.3.0 эта функция считается УСТАРЕВШЕЙ. Крайне не рекомендуется полагаться на эту возможность.
|
2. А не проще написать
$message_user = trim($_POST['message_user']);
| и проверить функцией empty()? И понятнее и быстрее. | |
|
|
|
|
|
|
|
для: Sfinks
(15.03.2012 в 23:38)
| | 1. У меня версия PHP 5.3.5. Благодарю за подсказку! Значит \d, \D, \w, \W тоже устарели в этой версии? Или только \s и \S?
2. Т.е. функция empty() вернёт TRUE, если переменная $message_user будет состоять из одних символов перевода строки, пробелов, символов возврата каретки, символов табуляции, пустой строки, 0, "0", FALSE, NULL, array(), так? Я правильно понял?
3. Ещё одно: функцию empty() нельзя употреблять в таком виде
empty(trim($message_user));
|
...но в таком можно?
$message_user = trim($message_user);
empty($message_user);
|
Т.е. нельзя в функцию empty() пихать другую функцию, которая делает что-то с переменной, так? Но по отдельности можно? | |
|
|
|
|
|
|
|
для: SilentChild
(16.03.2012 в 13:22)
| | > У меня версия PHP 5.3.5. Благодарю за подсказку! Значит \d, \D, \w, \W тоже устарели в этой
версии? Или только \s и \S?
Устарели не \d, \D, \w, \W, \s, \S и т.д., а ereg() и другие POSIX Regex Функции. Вместо них рекомендуется использовать preg_match() и тому подобные функции (PCRE/Perl-совместимые).
> Т.е. функция empty() вернёт TRUE, если переменная $message_user будет состоять из одних
символов перевода строки, пробелов, символов возврата каретки, символов табуляции, пустой
строки, 0, "0", FALSE, NULL, array(), так?
Нет. empty() вернет тру если переменная будет пустой, нулевой, неопределенной или null. А функция trim() удаляет пробельные символы из начала и конца строки. Пробельными считаются пробел, \t, \n, \r, \0, \x0B.
Т.е. в вашем случае после trim() строка будет пустой и empty() вернет true.
> Т.е. нельзя в функцию empty() пихать другую функцию, которая делает что-то с переменной,
так? Но по отдельности можно?
Именно так. | |
|
|
|
|
|
|
|
для: Sfinks
(16.03.2012 в 19:40)
| | Благодарю Вас за исчерпывающий ответ! =) | |
|
|
|