我正在为CodeIgniter的表单验证编写回调函数 . 只允许使用字母,数字,短划线,下划线和空格 . 我目前正在使用这个正则表达式:
preg_match("/^([-a-z_ ])+$/i", $string)
但它不适用于非ASCII字符,如čšćđž等 . 它是一个输入名字和姓氏的字段,它也必须采取所有这些非ascii字符 . 如何修改这个正则表达式以包括那些charachters?
您可以使用 unicode letter 和 unicode number 属性:
preg_match('/^([-_ \p{L}\p{N}])+$/iu', $string)
更新:您可能不需要捕获组:
preg_match('/^[-_ \p{L}\p{N}]+$/iu', $string)
根据http://us2.php.net/manual/ro/reference.pcre.pattern.modifiers.php
你只需要使用unicode修饰符:
preg_match("/^([-a-z_ ])+$/ui", $string)
使用 u 修饰符和 \p{L} 并添加数字,您可以使用 [0-9] 或 \p{N} :
u
\p{L}
[0-9]
\p{N}
preg_match('/^[-\p{L}\p{N}_ ]+$/u', $string) ^^^^^^^^^^ ^
请注意,您不希望在捕获组太多的情况下创建过多的开销 . 我删除了圆括号以获得最佳性能 . i 修饰符是多余的,因为模式中没有文字字母 .
i
见demo
我的正则表达式:
Anubhava's regex:
3 回答
您可以使用 unicode letter 和 unicode number 属性:
更新:您可能不需要捕获组:
根据http://us2.php.net/manual/ro/reference.pcre.pattern.modifiers.php
你只需要使用unicode修饰符:
使用
u
修饰符和\p{L}
并添加数字,您可以使用[0-9]
或\p{N}
:请注意,您不希望在捕获组太多的情况下创建过多的开销 . 我删除了圆括号以获得最佳性能 .
i
修饰符是多余的,因为模式中没有文字字母 .见demo
我的正则表达式:
Anubhava's regex: