#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
— самый конец веревки.