我正在尝试使用正则表达式检查PHP中的用户输入有效性,但是我只是不知道是什么。我的正则表达式有误
这是我的+process.env.SALT_ROUNDS
声明:
if
\如果为true }
我遇到以下错误:
警告:preg_match():编译失败:PCRE在偏移量12处不支持\ L,\ l,\ N {name},\ U或\ u
答案 0 :(得分:3)
“ PCRE”代表“与Perl兼容的正则表达式”,但这并不意味着Perl5正则表达式中的所有功能都在PCRE中可用。 PHP手册在PCRE: Differences from Perl上有一页,其中包含与错误消息中的语句相似的语句:
不支持以下Perl转义序列:\ l,\ u,\ L,\ U。实际上,这些是通过Perl的常规字符串处理实现的,而不是其模式匹配引擎的一部分。
PHP(自7.0起)确实有support for \u
escapes in a string,如果有双引号,则为 ,因此"\u{0590}"
将表示字符,但内部可能没有预期的效果regex ,因为您需要以某种方式告诉字符类您需要一系列Unicode代码点,而不是一组可能的8位值。
在这种情况下,您真正想要的是 Unicode代码点的PCRE标记,该描述在Escape Sequences下:
在UTF-8模式下,允许使用“ \ x {...}”,其中大括号的内容为一串十六进制数字。它被解释为UTF-8字符,其代码号是给定的十六进制数字。
提及“ UTF-8模式”是指the u
pattern modifier:
此修饰符打开与Perl不兼容的PCRE的其他功能。模式和主题字符串被视为UTF-8。无效的主题将导致preg_ *函数不匹配。无效的模式将触发E_WARNING级别的错误。
所以我相信您的模式:
'/^[\u0590-\u05fe ]+$/'
应更改为:
'/^[\x{0590}-\x{05fe} ]+$/u'
请注意,正如u
修饰符的手册所暗示的那样,主题字符串必须编码为UTF-8 才能起作用;不支持UTF-16或任何其他Unicode编码。