Проблема с регулярными диакритическими знаками

#php #regex #cakephp #diacritics

#php #регулярное выражение #cakephp #диакритические знаки

Вопрос:

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

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

Спасибо!

P.S.: Если это имеет значение, я использую PHP с фреймворком CakePHP.

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

Комментарии:

1. Как мы можем вам помочь, если вы не говорите нам, какое у вас регулярное выражение?

2. Извините, забыл добавить это!

Ответ №1:

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

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

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

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

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

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