Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Где ошибка? preg_match
Форумы портала PHP.SU » PHP » Регулярные выражения » Где ошибка? preg_match

Страниц (1): [1]
 

1. makar3000 - 05 Сентября, 2011 - 20:21:24 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.         if(empty($name)) {
  2.                  echo 'не заполнено поле Имя';
  3.         } else {
  4.                 if(preg_match('$[^а-яА-Яa-z0-9\-\_\.]+$i', $name)) {
  5.                         echo 'недопустимые символы';
  6.                 }
  7.         }
  8.  
  9.        
  10.         if(empty($fam)) {
  11.                  echo 'не заполнено поле фамилия';
  12.         } else {
  13.                 if(preg_match('$[^а-яА-Яa-z0-9\-\_\.]+$i', $fam)) {
  14.                         echo 'недопустимые символы';
  15.                 }
  16.         }
  17.  


Вот смотрите ввожу допустим в первое поле (Имя) с с большой буквы... Все норм
Ввожу Фамилию ошибка недопустимые символы... ввожу на русском.

Может не правильно сделал проверку [^а-яА-Яa-z0-9\-\_\.]
2. LIME - 05 Сентября, 2011 - 20:40:24 - перейти к сообщению
makar3000 неуверен насчет регулярки но если первая работает то вероятно что фамилия не приходит
выводите фамилию сначала чтобы проверить строку в которой ищет
возможно она пустая
3. White - 05 Сентября, 2011 - 20:40:29 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. if(!preg_match("/^[А-яА-zё0-9\-\_\.]+$/i", $fam)) echo 'недопустимые символы';
4. Champion - 05 Сентября, 2011 - 20:54:41 - перейти к сообщению
Ну можно увидеть, какой недопустимый символ нашла регулярка:
PHP:
скопировать код в буфер обмена
  1. if (preg_match('$[^а-яА-Яa-z0-9\-\_\.]+$i', $fam, $m)) {
  2. echo 'недопустимый символ' ; var_dump($m);
  3. }
Кстати, если пишете в utf-8, надо написать маленькую букву u и помнить, что А-Я (большие буквы) - это не один интервал, а 2 отдельных интервала А-ПР-ЯЁ (не точно помню, где первый интервал заканчивается: на П или не на П). Поэтому лучше писать маленькие [а-яё] с регистронезависимостью, а большие вообще не указывать
5. f111 - 06 Сентября, 2011 - 14:08:58 - перейти к сообщению
Champion, разве? в каком языке? я тестил на php, и вот результат:

искомый текст: "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"

РВ: "|[А-ЯЁ]+|"

совпадения: "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
________________________________ _______________________
искомый текст: "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"

РВ: "|[а-яё]+|i"

совпадения: Совпадений не найдено.
(Добавление)
makar3000 пишет:
if(preg_match('$[^а-яА-Яa-z0-9\-\_\.]+$i', $name))

Интересная регулярка, знак доллара всегда используется что бы обозначить конец строки, вы же его используете в качестве границ выражения.

РВ пользователя White должно подойти.

ну или мой вариант который не сильно отличается:
PHP:
скопировать код в буфер обмена
  1. if(preg_match("|^[^А-ЯЁа-яёA-Za-z0-9-_.]+$|i", $fam)) echo 'недопустимые символы';
6. Champion - 06 Сентября, 2011 - 18:12:18 - перейти к сообщению
f111 пишет:
разве? в каком языке? я тестил на php, и вот результат:
в русском языке в кодировке UTF-8
(Добавление)
Маленькие буквы не подряд идут, а большие подряд.
http://www[dot]utf8-chartable[dot]de/uni[dot][dot][dot]de-utf8-table[dot]pl - вот тут если выбрать кириллицу (9 пункт меню), маленькая буква п имеет код \xD0BF, а следующая - уже \xD180

 

Powered by ExBB FM 1.0 RC1