|
|
|
| Здравствуйте, форумчане. Помогите пожалуйста составить регулярное выражение. Задача простая: пользовтель отпраляет письмо через форму обратной связи. Сам тескт письма $letter передается через форму и изначально вводится в поле textarea. В письме допускаются только латинские буквы, цифры и знаки пунктуации, скобки и кавычки. Не могу добиться проверки многострочного текста.
if (!preg_match("/([A-Za-z0-9:;,!'\s*\-\.\?\()\"]+)/m", $letter)) или
if (!preg_match("/([A-Za-z0-9:;,!'\s*\-\.\?\()\"]+)/", $letter))
- не проверяет и пропускает любые недозволенные символы, например @ & #
if (!preg_match("/^([A-Za-z0-9:;,!'\s*\-\.\?\()\"]+)$/m", $letter))
- недозволенные символы не пропускает, но и не пропускает многострочное письмо, если там есть строки заполненные не полностью, например заголовки или перечисления в столбик
Кто-то сталкивался с такой задачей?
Заранее благодарна
Danga | |
|
|
|
|
|
|
|
для: danga
(02.03.2014 в 19:17)
| | без примера входящего текста и неверного результата, сама проблема до конца не ясна.
приведу некоторые примеры, возможно они ответят на все вопросы.
<?php
$allowed_symbols = '[a-z0-9:;,!\'\s*.?()"-]';
echo (int)!preg_match("/$allowed_symbols/im", '@3'); //0 проверка отсуствия разрешенных символов
echo (int)!preg_match("/^$allowed_symbols+$/i", "aaa\nb@bb\nccc"); //1 присуствуют недопустимые символы во всем тексте
echo (int)!preg_match("/^$allowed_symbols+$/i", "a@aa\nbbb\nccc"); //1 присуствуют недопустимые символы во всем тексте
echo (int)!preg_match("/^$allowed_symbols+$/im", "aaa\nb@bb\nccc"); //0 есть строка полностью из допустимых символов (aaa)
echo (int)!preg_match("/^$allowed_symbols+$/im", "a@aa\nbbb\nccc"); //0 есть строка полностью из допустимых символов (bbb)
echo (int)!preg_match_all("/^$allowed_symbols+$/i", "aaa\nb@bb\nccc", $match); //1 во всем тексте есть недопусимые символы
echo (int)!preg_match_all("/^$allowed_symbols+$/im", "aaa\nb@bb\nccc", $match); //0 есть строки полностью из допустимых символов (aaa,ccc)
echo preg_replace("/^$allowed_symbols+$/i", '<$0>' , "aaa\nb@bb\nccc", 1); //покажет что находит 2 пункт (1)
echo preg_replace("/^$allowed_symbols+$/im", '<$0>' , "aaa\nb@bb\nccc", 1); //покажет что находит 4 пункт (0)
echo '---лучше так проверять присуствие недопустимых символов--';
$not_allowed_symbols = '[^a-z0-9:;,!\'\s*.?()"-]';
echo (int)preg_match("/$not_allowed_symbols/i", "aaa\nb@bb\nccc"); //1
echo (int)preg_match("/$not_allowed_symbols/i", "aaa\nbbb\nccc"); //0
|
(int) я использовал что бы echo могла вывести false, а то пустота не очень наглядный пример
универсальный помощник
<?php
echo preg_replace($regex, '<$0>' , $text, 1); //покажет что находит preg_match
echo preg_replace($regex, '<$0>' , $text); //покажет что находит preg_match_all
|
| |
|
|
|
|
|
|
|
для: duhon
(03.03.2014 в 13:24)
| | Добрый день,
что-то я совсем запуталась с этой проверкой. Сделала маленькую тестовую программу, ввожу любой текст письма, например:
" Hello,
I would like to know more about your services"
выдает мое сообщение, как будто в тексте недозволенные символы :
"There are not allowed symbols in the text";
Что не правильно?
<?php
$not_allowed_symbols = '[^a-z0-9:;,!\'\s*.?()"-]';
echo '
<form action="test.php" method="post">
<textarea name="letter" autofocus maxlength="1200" cols="80" rows="15" ></textarea>
<input type="submit" name="OK" value="send" >
</form> ';
if (isset($_POST['OK'])) {
$letter = nl2br($_POST["letter"]);
IF (preg_match("/$not_allowed_symbols/i", $letter)) echo "There are not allowed symbols in the text";
}
?>
|
| |
|
|
|
|
|
|
|
для: danga
(03.03.2014 в 15:37)
| | все дело в nl2br
<?php
$letter = nl2br("aaa\nbbb\nccc");
print_r($letter);
|
результат будет
aaa<br />\nbbb<br />\nccc
|
а теперь сравниваем это [^a-z0-9:;,!\'\s*.?()"-]
<?php
echo preg_replace('/[^a-z0-9:;,!\'\s*.?()"-]/i', '{$0}' , nl2br("aaa\nbbb\nccc"), 1); //aaa{<}br />\nbbb<br />\nccc
|
тоесть регулярка сказала что символ < недозволенный символ
Выход, сначала проверить наличие неразрешенных символов, а потом уже применять функцию nl2br
З.Ы. вообще вас занесло нетуда, обратите внимание хотя бы на http://www.php.net/manual/ru/book.filter.php | |
|
|
|
|
|
|
|
для: duhon
(03.03.2014 в 16:08)
| | Ураа! Все получается теперь.
Duhon, спасибо преогромное!
Это самый лучший форум и здесь самые умные и вежливые форумчане! | |
|
|
|