警告:preg_Match()[unction.preg-Match]:编译失败:在偏移量上没有重复内容
我正在尝试将preg_Match检查从url检查更改为用户名检查,这是可以接受的最小/最大2-16个字符、破折号、空格和符号。我收到此错误
警告:preg_Match()[unction.preg-Match]:编译失败:在偏移量14处没有重复的内容
if(empty($string) || preg_match("#^([w- ]{2,16}*(?:.[w- ]{2,16}*)+):?(d+)?/?#i", $string))
查找URL的旧代码
if(empty($string) || preg_match("#^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?#i", $string))
解决方案
问题在这里:
[w- ]{2,16}*
不能同时使用{2,16}
和*
,只能使用其中一个。
如果您希望匹配2到16组[w- ]
至少0次,请将其包装在子模式中并将*
附加到外部:
(?:[w- ]{2,16})*
相关文章