正则表达式刚刚在 Bluehost 上崩溃
Regex just broke on Bluehost
这是我的错误,似乎与服务器升级有关。
preg_match(): Compilation failed: invalid range in character class
// The regex that did not compile
return preg_match("/^[\.\pL-0-9'\s]+$/u", $value);
我看不到问题,也没有找到关于哪些字符现在可能需要转义的明确文档。
PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 10.32 2018-09-10
PCRE Unicode Version => 11.0.0
php 7.3.17
一个猜测(是的,在 7.3.11 中得到确认)是 L-0-9
部分失败了。
是否将第一个连字符视为文字连字符?如果是,请转义。
如果不是,您要匹配什么?
您不能拥有具有 unicode 属性的范围,错误来自 \pL
和 0
之间的连字符。 PCRE 的某些实现接受它作为连字符,而另一些则不接受。
只需将其删除,或者,如果要匹配连字符,请将其转义或将其放在字符的开头或结尾 class:
[.\pL0-9'\s]
或
[.\pL\-0-9'\s]
或
[-.\pL0-9'\s]
或
[.\pL0-9'\s-]
这是我的错误,似乎与服务器升级有关。
preg_match(): Compilation failed: invalid range in character class
// The regex that did not compile
return preg_match("/^[\.\pL-0-9'\s]+$/u", $value);
我看不到问题,也没有找到关于哪些字符现在可能需要转义的明确文档。
PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 10.32 2018-09-10
PCRE Unicode Version => 11.0.0
php 7.3.17
一个猜测(是的,在 7.3.11 中得到确认)是 L-0-9
部分失败了。
是否将第一个连字符视为文字连字符?如果是,请转义。
如果不是,您要匹配什么?
您不能拥有具有 unicode 属性的范围,错误来自 \pL
和 0
之间的连字符。 PCRE 的某些实现接受它作为连字符,而另一些则不接受。
只需将其删除,或者,如果要匹配连字符,请将其转义或将其放在字符的开头或结尾 class:
[.\pL0-9'\s]
或
[.\pL\-0-9'\s]
或
[-.\pL0-9'\s]
或
[.\pL0-9'\s-]