这是在说这个,我想知道为什么会这样。它之前没有发生过。
警告:preg_replace():编译失败:第158行的messenger.php中偏移量为16的字符类中的无效范围
$pattern = array(
"/[^@\s]*@[^@\s]*\.[^@\s]*/",
"/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_]+/i",
'/\+?[0-9][0-9()-\s+]{4,20}[0-9]/'
);
$replacement = array(
"[removed email]",
"[removed url]",
"[removed phone]"
);
$message_text = preg_replace($pattern, $replacement, $message_text);
158行是$ message_text的最后一行。
谁可以提供帮助?
答案 0 :(得分:1)
在)
中,您错放了连字符,正则表达式引擎认为您正在尝试构建\s
和[z-\xff]
之间的范围。
速记类不可能出现在范围边界。
这是Debuggex.com中出现的错误:
以下是PCRE Reference:
的摘录如果是POSIX字符类(见下文)或,则会产生错误 出现除了定义单个字符的转义序列之外的转义序列 在预期范围结束字符的点。例如,
[A-\d]
有效,但[A-[:digit:]]
和\+?[0-9][0-9()\s+-]{4,20}[0-9]
不是。
使用\+?[0-9][0-9()\-\s+]{4,20}[0-9]
,或转义连字符{{1}}。
答案 1 :(得分:0)
你忘了逃避冲刺:
'/\+?[0-9][0-9()-\s+]{4,20}[0-9]/'
// here __^
应该是:
'/\+?[0-9][0-9()\-\s+]{4,20}[0-9]/'