Регулярное выражение с определенными специальными символами, запускающими арабский

#php #regex

Вопрос:

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

Поскольку я не мог придумать, чтобы просто разрешить любые буквы, пробелы - и»,». Нравится California - USA Cairo, Egypt London UK .

Регулярное выражение, которое я использую:

 '/[!@#$%^amp;*<>();{}[]_؟: =~/?.\"'] /'
 

Существует множество обратных косых черт, используемых для экранирования специальных символов регулярных выражений.

Тем не менее, он отлично работает с английским , как New York - USA , но он соответствует любым арабским словам, как القاهرة - مصر محمد .

 $input = "القاهرة - مصر";

if (preg_match('/[!@#$%^amp;*<>();{}[]_؟: =~/?.\"'] /', $input)) {
    echo 'match';
}
 

Почему он соответствует арабским буквам, в то время как он включает только определенные символы?

Ответ №1:

Вы можете использовать

 preg_match('~^[p{L}p{M},s-] z~u', $input)
 

Смотрите демонстрацию регулярных выражений. Подробные сведения:

  • ^ — начало строки
  • [p{L}p{M},s-] — одна или несколько букв ( p{L} ), диакритические знаки ( p{M} ), запятые, пробелы ( s ) и дефисы до
  • z — самый конец веревки.