首页 文章

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

提问于
浏览
2

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

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

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

3 回答

  • 0

    您可以使用 unicode letterunicode number 属性:

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

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

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

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

    你只需要使用unicode修饰符:

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

    使用 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

相关问题