preg_match( '/^[-A-Za-z0-9\p{Han}]+$/u', $name)
Это будет работать только для китайских иероглифов, мне нужно проверить все языки.
Какие-либо предложения?
Я попробовал ниже команды. Это работает для некоторого языка, но не работает для всех.
preg_match('/^[-A-Za-z0-9\p{L} ]+$/u', $name)
РЕДАКТИРОВАТЬ
Точное требование будет следующим: если строка содержит какой-либо символ, замените его на _
; разрешая многоязычный контент.
Точное требование будет следующим: если строка содержит какой-либо символ, замените его на
_
; разрешая многоязычный контент.
Итак, вам нужно использовать preg_replace
который заменяет все неперекрывающиеся вхождения шаблона с определенной строкой замены, и шаблон, соответствующий символу, \p{S}
, Не забудь u
UNICODE модификатор.
preg_replace('~\p{S}~u', '_', $s);
Теперь, если вы также планируете сопоставлять и удалять знаки препинания (класс символов POSIX [:punct:]
включает знаки препинания и символы), за исключением -
, вы можете использовать
preg_replace('~(?!-)[[:punct:]]~u', '_', $s);
Увидеть regex demo.
Вот, (?!-)
негативный взгляд будет ограничивать более общий [[:punct:]]
шаблон, который соответствует любой пунктуации и символьным символам, заставляя механизм регулярных выражений исключать -
от сопоставления.
Вы можете добавить больше исключений, если это необходимо.
Других решений пока нет …