正则表达式匹配字母,数字和空格,包括非ascii charachters

时间:2015-07-18 16:19:52

标签: php regex codeigniter

我正在为CodeIgniter的表单验证编写回调函数。只允许使用字母,数字,短划线,下划线和空格。我目前正在使用这个正则表达式:

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

但它不适用于非ASCII字符,如čšćđž等。这是一个输入姓名的字段,它也必须采用所有这些非ascii字符。如何修改这个正则表达式以包括那些charachters?

3 个答案:

答案 0 :(得分:3)

您可以使用 unicode letter unicode number 属性:

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

更新:您可能不需要捕获组:

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

答案 1 :(得分: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

答案 2 :(得分:0)

根据http://us2.php.net/manual/ro/reference.pcre.pattern.modifiers.php

你只需要使用unicode修饰符:

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