正则表达式刚刚在 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 属性的范围,错误来自 \pL0 之间的连字符。 PCRE 的某些实现接受它作为连字符,而另一些则不接受。

只需将其删除,或者,如果要匹配连字符,请将其转义或将其放在字符的开头或结尾 class:

[.\pL0-9'\s]

[.\pL\-0-9'\s]

[-.\pL0-9'\s]

[.\pL0-9'\s-]