Regex диакритические проблемы - PullRequest
1 голос
/ 26 апреля 2011

Я пытаюсь проверить некоторые пользовательские вводы, но мое регулярное выражение терпит неудачу, когда сталкивается с диакритическими знаками.Я говорю о таких символах, как ăĂ и т. Д.

Что я должен добавить к коду регулярных выражений, чтобы он также проверял диакритические знаки из входных данных?

Спасибо!

PS: Если это имеет значение, я использую PHP с CakePHP framework.

Это фрагмент кода, который я сейчас использую для проверки ввода пользователя: return preg_match('|^[0-9a-zA-Z_-\s]*$|', $value);

1 Ответ

6 голосов
/ 26 апреля 2011

Предполагая, что вы хотите сопоставить буквы, тогда разрешение символов Unicode должно помочь:

Используйте /\p{L}+/u, например, если вы хотите сопоставить последовательность букв. Не забудьте модификатор /u (Unicode).

В вашем случае:

return preg_match('|^[0-9\p{L}_\s-]*$|u', $value);

должно работать.

Кроме того, вероятно, не стоит использовать | в качестве разделителя регулярных выражений. Для текущего регулярного выражения / вполне подойдет; другие альтернативы ~ или #, потому что они редко встречаются в тексте и не имеют никакого специального значения в регулярных выражениях.

...