Trouble с preg_match

Пэлт

PHP:
  1. if(!preg_match(‘/^[0-9a-zA-Z-_.]+$/’, $string)) $error = ‘Разрешены только русские и английский буквы’;

Действительно этот фильтр работает только с английскими буквами.
Как надо написать, чтобы разрешены были только русские буквы, английские буквы и цифры. А символы и прочая херня пусть отсекается
— Добавлено —
Понял. Лишняя ^ стояла. Вопрос решён

 

don.bidon

зобанили в гугле?

 

alexphp

То есть, вы считаете, что «шапочка» (символ ^) не нужна? А у меня получилось вот так:

PHP:
  1. <?php
  2.  
  3. $string1 = «абвгдеABCDE01234»;
  4. if(!preg_match(‘/[0-9a-zA-Z-_.]+$/’, $string1)) {
  5.     $error = ‘Для стринга1: Разрешены только русские и английские буквы</br>’;
  6.     echo $error;
  7. } else {
  8.     echo «Для стринга1: всё OK!</br>»;
  9. }
  10.  
  11. $string2 = «ABCDE01234абвгде»;
  12. if(!preg_match(‘/[0-9a-zA-Z-_.]+$/’, $string2)) {
  13.     $error = ‘Для стринга2: Разрешены только русские и английские буквы</br>’;
  14.     echo $error;
  15. } else {
  16.     echo «Для стринга2: всё OK!</br>»;
  17. }
  18.  
  19. /*
  20. Вывод:
  21. Для стринга1: всё OK!
  22. Для стринга2: Разрешены только русские и английские буквы
  23. */

И как это объяснить? Кроме как неадекватным поведением preg_match’a, за что я лично его не люблю, о чём я писал ещё вот здесь в конце темы:
https://php.ru/forum/threads/reguljarnye-vyrazhenija-dlja-kirillicy-i-simvolov.54968/page-2

 

don.bidon

Пэлт

Я подозревал что в этом может быть дело.. Внатуре странная штука preg_match

 

Sail

Шаблон из цифр, латинских символов, дефиса, подчёркивания и точки.
Шаблон обязывает набор символов, в нём обозначенный находиться в конце строки (символ $).
Проверяем в условии отрицательный вариант возврата функции.

Всё как обычно: получаем результат выполнения того кода, что написан, а не того, что придуман :)
— Добавлено —
Есть ещё шаблон с отрицанием… Например: /[^а-ЯёЁА-Я]+/
При необходимости — добавить пробельный символ (s)
— Добавлено —

/^[а-яёЁА-Яdw]+$/u
Соответственно, если строка «не содержит» данный шаблон — то в ней есть «символы и прочая херня с пробелами»

 

don.bidon

о да, шапочка была неспроста

 

alexphp

Да, это интересный вариант. Наверное, сработает даже без «d», потому что «d», если не ошибаюсь, является подмножеством «w»?

 

Sail

Да, зарапартовался :)
Плюс к цифрам ещё и подчёркивание.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *