PHP如何用单个正则表达式检测字符串含多个?或连续//
用单个正则实现两种URL异常检测需求
当然可以!完全能用一个正则表达式同时检测这两种情况,我直接给你写好代码,再拆解下背后的逻辑:
实现代码
$str = '/index.php?url=cont\roller//act%ion?id=5'; if(preg_match('/(\?.*\?|\/\/)/', $str)){ // 执行你的业务逻辑 }
正则逻辑拆解
这个正则用|(逻辑“或”)把两个检测规则拼在一起,分别对应你的两个需求:
\?.*\?:专门匹配出现1个以上的问号。\?是转义后的问号(因为正则里?是特殊元字符),.*匹配任意数量的任意字符(默认不包含换行),后面再跟一个\?,就意味着字符串里至少有两个问号。\/\/:直接匹配连续两个及以上的正斜杠。同样,正则里/是特殊字符,所以必须用反斜杠转义,写成\/\/就能精准匹配//这种连续斜杠的情况。
可选优化
如果你的字符串里可能包含换行符,并且需要跨换行匹配多个问号的场景,可以给正则加上s修饰符,让.*能够匹配换行:
if(preg_match('/(\?.*\?|\/\/)/s', $str)){ // 执行你的业务逻辑 }
这样不管是多问号还是连续双斜杠的情况,这个正则都能准确命中,完美满足你的检测需求~
内容的提问来源于stack exchange,提问作者Emanuel Ones
相关产品推荐
相关产品推荐

