【问题标题】:Using unicode in a regular expression with PHP在 PHP 的正则表达式中使用 unicode
【发布时间】:2011-12-29 03:32:08
【问题描述】:

我正在尝试将字符 Ö (U+00D6) 添加到下面的正则表达式中。显然出了点问题,因为它不适用于我的 preg_match 函数。

正常工作的正则表达式:

/^([A-Z]{1})[a-z]{1,31}$/

应该起作用但不起作用的那个:

/^([A-Z\x{00D6}]{1})[a-z]{1,31}$/

我显然试图创建一个正则表达式,它以一个以Ö 扩展的大写字母开头,然后是小写字母。总的来说,字符串的长度必须在 2-32 之间。包含Ö 的 Unicode 表达式的正则表达式有什么问题?

【问题讨论】:

    标签: php regex internationalization expression preg-match


    【解决方案1】:

    \x{00D6} 将仅匹配单个字节 \xD6 符号。但是,当您将字符串传递给preg_match 时,它很可能以UTF-8 编码,即\xC3 \x96

    您需要为您的正则表达式使用/u modifier 来支持它。

    /^([A-Z\x{00D6}]{1})[a-z]{1,31}$/u
    

    另外,{1} 是装饰性的,但是是多余的。

    【讨论】:

    • 你刚刚拯救了我的一天。感谢您回答实际问题以及关于 {1} 多余的部分。
    猜你喜欢
    • 2016-04-22
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多