PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Почему так?
SosedPutina
Отправлено: 13 Июня, 2020 - 13:31:52
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2020  


Помог: 0 раз(а)




Люди Добрые, Здравствуйте! Подскажите, объясните, почему вот эта регулярка /[^а-яА-ЯёЁ\-\s]/ при проверке имени пользователя пропускает имя Иван, но не пропускает имя Петр? Бьюсь над этим второй день, выручайте...
 
 Top
Строитель Модератор
Отправлено: 13 Июня, 2020 - 13:35:26
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 70 раз(а)




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


-----
~ PHP-7 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
SosedPutina
Отправлено: 13 Июня, 2020 - 13:49:04
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2020  


Помог: 0 раз(а)




Строитель пишет:
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{запись в бд}
Так вот иван пишетсяв бд, а петр нет.

И, разве это выражение не означает "всё кроме русских букв, знака " - " и пробела"?
 
 Top
Строитель Модератор
Отправлено: 13 Июня, 2020 - 13:56:06
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 70 раз(а)




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 пишет:
И, разве это выражение не означает "всё кроме русских букв, знака " - " и пробела"?
Да. Но можно сократить этот шаблон за счёт использования символьных классов.


-----
~ PHP-7 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
SosedPutina
Отправлено: 13 Июня, 2020 - 14:03:34
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2020  


Помог: 0 раз(а)




Строитель пишет:
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 пишет:
И, разве это выражение не означает "всё кроме русских букв, знака " - " и пробела"?
Да. Но можно сократить этот шаблон за счёт использования символьных классов.


Это каких?
 
 Top
Строитель Модератор
Отправлено: 13 Июня, 2020 - 14:12:05
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 70 раз(а)




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


-----
~ PHP-7 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
SosedPutina
Отправлено: 13 Июня, 2020 - 14:23:19
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2020  


Помог: 0 раз(а)




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

Благодарю! Немного уже прочёл об этом, хотя и не совсем разобрался. Разберусь. А всё таки, почему же ия "Иван" пропускалось моей корявой регуляркой?
 
 Top
Строитель Модератор
Отправлено: 13 Июня, 2020 - 14:26:33
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 70 раз(а)




SosedPutina потому что при работе с многобайтовыми кодировками нужно указывать модификатор u (unicode).


-----
~ PHP-7 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB