2015-07-18 3 views
1

Я пишу функцию обратного вызова для проверки формы CodeIgniter. Разрешены только буквы, цифры, тире, подчеркивание и пробел. Я в настоящее время использую это регулярное выражение:Регулярное выражение для совпадения букв, цифр и пробелов, включая атрибуты non-ascii

preg_match("/^([-a-z_ ])+$/i", $string) 

Но это не будет работать с не-ASCII charachters как č п.к. đ ž â и т.д. Это поле ввести имя и фамилию, и он должен принять все эти не-ascii charachters. Как изменить это регулярное выражение так же, как и те charachters?

+0

название и содержание абсолютно разные. –

+0

Извините, я не знал, как выразить себя – XploD

ответ

2

Вы можете использовать Юникода письмо и Unico де-номер свойства для этого:

preg_match('/^([-_ \p{L}\p{N}])+$/iu', $string) 

Обновление: Вы можете не нуждаться в захвата группы здесь:

preg_match('/^[-_ \p{L}\p{N}]+$/iu', $string) 
+1

Спасибо, этот работает как шарм! – XploD

0

u Использование модификатора и \p{L} и добавления номеров, вы можете использовать [0-9] или \p{N}:

preg_match('/^[-\p{L}\p{N}_ ]+$/u', $string) 
       ^^^^^^^^^^ ^

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

См demo

Мое выступление регулярное выражение:

enter image description here

Anubhava's regex:

enter image description here

+0

В настоящее время принятое решение слишком неэффективно. Пожалуйста, проверьте мои демонстрационные ссылки и сравните производительность. –