preg match — PHP preg_match для нескольких языков

preg_match( '/^[-A-Za-z0-9\p{Han}]+$/u', $name)

Это будет работать только для китайских иероглифов, мне нужно проверить все языки.
Какие-либо предложения?

Я попробовал ниже команды. Это работает для некоторого языка, но не работает для всех.

preg_match('/^[-A-Za-z0-9\p{L} ]+$/u', $name)

РЕДАКТИРОВАТЬ

Точное требование будет следующим: если строка содержит какой-либо символ, замените его на _; разрешая многоязычный контент.

1

Решение

Точное требование будет следующим: если строка содержит какой-либо символ, замените его на _; разрешая многоязычный контент.

Итак, вам нужно использовать preg_replace который заменяет все неперекрывающиеся вхождения шаблона с определенной строкой замены, и шаблон, соответствующий символу, \p{S}, Не забудь u UNICODE модификатор.

preg_replace('~\p{S}~u', '_', $s);

Теперь, если вы также планируете сопоставлять и удалять знаки препинания (класс символов POSIX [:punct:] включает знаки препинания и символы), за исключением -, вы можете использовать

preg_replace('~(?!-)[[:punct:]]~u', '_', $s);

Увидеть regex demo.

Вот, (?!-) негативный взгляд будет ограничивать более общий [[:punct:]] шаблон, который соответствует любой пунктуации и символьным символам, заставляя механизм регулярных выражений исключать - от сопоставления.

Вы можете добавить больше исключений, если это необходимо.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector