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 :: Версия для печати :: Проверка имени usera
Форумы портала PHP.SU » PHP » Регулярные выражения » Проверка имени usera

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

1. SosedPutina - 13 Июня, 2020 - 13:31:52 - перейти к сообщению
Люди Добрые, Здравствуйте! Подскажите, объясните, почему вот эта регулярка /[^а-яА-ЯёЁ\-\s]/ при проверке имени пользователя пропускает имя Иван, но не пропускает имя Петр? Бьюсь над этим второй день, выручайте...
2. Строитель - 13 Июня, 2020 - 13:35:26 - перейти к сообщению
SosedPutina пишет:
Люди Добрые, Здравствуйте! Подскажите, объясните, почему вот эта регулярка /[^а-яА-ЯёЁ\-\s]/ при проверке имени пользователя пропускает имя Иван, но не пропускает имя Петр? Бьюсь над этим второй день, выручайте...
Эта регулярка не пропускает ни то, ни другое. В этом можно убедиться, перейдя по ссылке
3. SosedPutina - 13 Июня, 2020 - 13:49:04 - перейти к сообщению
Строитель пишет:
SosedPutina пишет:
Люди Добрые, Здравствуйте! Подскажите, объясните, почему вот эта регулярка /[^а-яА-ЯёЁ\-\s]/ при проверке имени пользователя пропускает имя Иван, но не пропускает имя Петр? Бьюсь над этим второй день, выручайте...
Эта регулярка не пропускает ни то, ни другое. В этом можно убедиться, перейдя по ссылке

Использую этот код:
PHP:
скопировать код в буфер обмена
  1. if(preg_match("/[^а-яА-ЯёЁ\-\s]/", trim($_GET['1']))){
  2.     echo "неудача";}else{запись в бд}
Так вот иван пишетсяв бд, а петр нет.
(Добавление)
SosedPutina пишет:
Строитель пишет:
SosedPutina пишет:
Люди Добрые, Здравствуйте! Подскажите, объясните, почему вот эта регулярка /[^а-яА-ЯёЁ\-\s]/ при проверке имени пользователя пропускает имя Иван, но не пропускает имя Петр? Бьюсь над этим второй день, выручайте...
Эта регулярка не пропускает ни то, ни другое. В этом можно убедиться, перейдя по ссылке

Использую этот код:
PHP:
скопировать код в буфер обмена
  1. if(preg_match("/[^а-яА-ЯёЁ\-\s]/", trim($_GET['1']))){
  2.     echo "неудача";}else{запись в бд}
Так вот иван пишетсяв бд, а петр нет.

И, разве это выражение не означает "всё кроме русских букв, знака " - " и пробела"?
4. Строитель - 13 Июня, 2020 - 13:56:06 - перейти к сообщению
SosedPutina
PHP:
скопировать код в буфер обмена
  1. $str = 'Иван';
  2.  
  3. if (preg_match("/[^а-яА-ЯёЁ\-\s]/u", $str)) {
  4.     echo "неудача";
  5. } else {
  6.     echo $str;
  7. }
  8.  
  9.  
  10. $str = 'Пётр';
  11.  
  12. if (preg_match("/[^а-яА-ЯёЁ\-\s]/u", $str)) {
  13.     echo "неудача";
  14. } else {
  15.     echo $str;
  16. }

(Добавление)
SosedPutina пишет:
И, разве это выражение не означает "всё кроме русских букв, знака " - " и пробела"?
Да. Но можно сократить этот шаблон за счёт использования символьных классов.
5. SosedPutina - 13 Июня, 2020 - 14:03:34 - перейти к сообщению
Строитель пишет:
SosedPutina
PHP:
скопировать код в буфер обмена
  1. $str = 'Иван';
  2.  
  3. if (preg_match("/[^а-яА-ЯёЁ\-\s]/u", $str)) {
  4.     echo "неудача";
  5. } else {
  6.     echo $str;
  7. }
  8.  
  9.  
  10. $str = 'Пётр';
  11.  
  12. if (preg_match("/[^а-яА-ЯёЁ\-\s]/u", $str)) {
  13.     echo "неудача";
  14. } else {
  15.     echo $str;
  16. }

(Добавление)
SosedPutina пишет:
И, разве это выражение не означает "всё кроме русских букв, знака " - " и пробела"?
Да. Но можно сократить этот шаблон за счёт использования символьных классов.


Это каких?
6. Строитель - 13 Июня, 2020 - 14:12:05 - перейти к сообщению
SosedPutina пишет:
Это каких?
Например \p{Cyryllic}:
PHP:
скопировать код в буфер обмена
  1. $str = 'Пётр';
  2.  
  3. if (preg_match('/[^\p{Cyrillic}\h-]/u', $str)) {
  4.     echo "неудача";
  5. } else {
  6.     echo $str;
  7. }
7. SosedPutina - 13 Июня, 2020 - 14:23:19 - перейти к сообщению
Строитель пишет:
SosedPutina пишет:
Это каких?
Например \p{Cyryllic}:
PHP:
скопировать код в буфер обмена
  1. $str = 'Пётр';
  2.  
  3. if (preg_match('/[^\p{Cyrillic}\h-]/u', $str)) {
  4.     echo "неудача";
  5. } else {
  6.     echo $str;
  7. }

Благодарю! Немного уже прочёл об этом, хотя и не совсем разобрался. Разберусь. А всё таки, почему же ия "Иван" пропускалось моей корявой регуляркой?
8. Строитель - 13 Июня, 2020 - 14:26:33 - перейти к сообщению
SosedPutina потому что при работе с многобайтовыми кодировками нужно указывать модификатор u (unicode).

 

Powered by ExBB FM 1.0 RC1