【问题标题】:PHP Regular Expression will not match accented charactersPHP 正则表达式将不匹配重音字符
【发布时间】:2013-07-05 16:23:59
【问题描述】:

我正在尝试构建一个与 PHP 兼容的正则表达式,它允许重音字符,例如“ü”。 据我了解, \p{L} 运营商应该这样做。到目前为止我所拥有的:

/^[a-z0-9\p{L}][a-z0-9_\p{L}]*/i

这应该允许一个字符串可以以任何 a-z、0-9 和重音字符开头,然后可以后跟任意数量的 a-z、0-9 和重音字符,并且整个表达式不区分大小写。

但是在测试中,当在字符串中的任何位置使用诸如“ü”之类的字符时,验证会失败。 我已经确保传递的值是用 utf8 编码的:

utf8_encode($value)

但它仍然失败。 有什么建议吗?

提前致谢

--------------编辑---------- ----

在另一台服务器上测试后,原来的模式也有效。

/^[a-z0-9\p{L}][a-z0-9_\p{L}]*/i

问题似乎与服务器设置有关。 找到后我会发布解决方案。

【问题讨论】:

  • 尝试开启utf修饰符/.../ui
  • 很遗憾,utf 修饰符没有成功。

标签: php regex validation utf-8 expression


【解决方案1】:

我认为这可能对你有用:

$pattern =  '/^[0-9a-zá-úàü][0-9_a-zá-úàü]*$/i';

我运行了以下代码来测试模式:

$str = "patinação";
$pattern =  '/^[0-9a-zá-úàü][0-9_a-zá-úàü]*$/i';
if (preg_match($pattern, $str, $matches)){
    echo $matches[0];//output: patinação
}

【讨论】:

  • 结果和以前一样,它不会注册任何重音字符。
  • @dooffas - 我刚刚对其进行了测试,并编辑了我的答案以显示测试和结果。如果它不适合你,我不知道为什么,因为它在这里工作正常。
  • 我同意,即使用户自己给出的第一个代码在我的机器上也能正常工作。看起来您的网络服务器上没有启用 pcre unicode。
  • 有趣的是,这可以在另一个 Web 服务器上运行。尽管需要对您的回复进行编辑。 $str 和 $pattern 绕错了方向。我遇到的问题一定是由于服务器设置造成的。感谢您的帮助。
猜你喜欢
  • 2015-07-27
  • 2015-10-16
  • 1970-01-01
  • 2013-07-03
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多