抛转引玉方式求正则匹配问题

董哥007 2020-07-21 02:58:24
我要用正则匹配一个url 这个url必须同时含有2个参数 sp和bm

形如 aa=2&sp=2&bm=333


我自己实现了一个正则
$pat = '/(bm=\d+).+(sp=\d+)/';


但是这个匹配规则是有bug的、
比如我 ss=4&bm=111&dbm=ttt这种也算匹配成功。。所以我这个规则对参数中间的校验不会写了,求大佬支招
...全文
323 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzs1013 2020-08-07
  • 打赏
  • 举报
回复
<?php //$str="aa=2&bm=2&sp=333";//或 $str="aa=2&sp=2&bm=333"; if(preg_match("/(?<=^|\&|\?)sp(?=\=).*(?<=^|\&|\?)bm(?=\=)|(?<=^|\&|\?)bm(?=\=).*(?<=^|\&|\?)sp(?=\=)/Uisx",$str,$nn)){ echo 1; }else{ echo 0; } ?>
董哥007 2020-08-02
  • 打赏
  • 举报
回复
首先我先谢谢你的回答,其实我的诉求还是想知道正则的实现方法
浴火_凤凰 2020-08-02
  • 打赏
  • 举报
回复
这个需求感觉正则不太好理解 把楼主的伪代码 大概实现了一下,楼主可以参考看看

function checkstr($str){
  //伪代码如下
  $pos=strpos($str,"?");
 if($pos>-1&&strpos($str,"bm=")>$pos&&strpos($str,"sp=")>$pos)
    {
        return true;
    }
    else
    {
        return false;
    }
}
董哥007 2020-07-22
  • 打赏
  • 举报
回复
这还需要试吗。你这个正则,两个变量之间的东西,你用的.* 这个并不能做url合法性验证。懂吗。我基本正则还是懂的
下雨的声音丶 2020-07-21
  • 打赏
  • 举报
回复
引用 7 楼 董哥007 的回复:
[quote=引用 6 楼 下雨的声音丶 的回复:][quote=引用 5 楼 董哥007 的回复:][quote=引用 4 楼 下雨的声音丶 的回复:][quote=引用 3 楼 董哥007 的回复:][quote=引用 2 楼 下雨的声音丶 的回复:]/((^sp|&sp)=\d+).*(&bm=\d+)|((^bm|&bm)=\d+).*(&sp=\d+)/ 这样应该满足
一看就知道不对啊,你2个参数中间的.*没有对url合法性做校验。[/quote] ?[/quote] 我要的效果 是 相当于一个方法 function checkstr(str){ //伪代码如下 1.这个字符串url必须包含bm和sp参数 2.这个字符串必须是合法的querystring也就是 ?后面的东西 if(满足上面条件){ return ture } else{ return false } }[/quote] 既然是在PHP里面处理那就简单了啊,我还以为是在nginx 或者apache 里面使用呢 用这个函数 解析一下在判断是否存在 就行了 https://www.php.net/manual/zh/function.parse-str.php[/quote] 我用函数写的伪代码 是表明我的需求,实际上 我是想知道正则怎么实现[/quote] 我的正则是没问题的,你倒是试一试啊
董哥007 2020-07-21
  • 打赏
  • 举报
回复
引用 6 楼 下雨的声音丶 的回复:
[quote=引用 5 楼 董哥007 的回复:][quote=引用 4 楼 下雨的声音丶 的回复:][quote=引用 3 楼 董哥007 的回复:][quote=引用 2 楼 下雨的声音丶 的回复:]/((^sp|&sp)=\d+).*(&bm=\d+)|((^bm|&bm)=\d+).*(&sp=\d+)/ 这样应该满足
一看就知道不对啊,你2个参数中间的.*没有对url合法性做校验。[/quote] ?[/quote] 我要的效果 是 相当于一个方法 function checkstr(str){ //伪代码如下 1.这个字符串url必须包含bm和sp参数 2.这个字符串必须是合法的querystring也就是 ?后面的东西 if(满足上面条件){ return ture } else{ return false } }[/quote] 既然是在PHP里面处理那就简单了啊,我还以为是在nginx 或者apache 里面使用呢 用这个函数 解析一下在判断是否存在 就行了 https://www.php.net/manual/zh/function.parse-str.php[/quote] 我用函数写的伪代码 是表明我的需求,实际上 我是想知道正则怎么实现
下雨的声音丶 2020-07-21
  • 打赏
  • 举报
回复
引用 5 楼 董哥007 的回复:
[quote=引用 4 楼 下雨的声音丶 的回复:][quote=引用 3 楼 董哥007 的回复:][quote=引用 2 楼 下雨的声音丶 的回复:]/((^sp|&sp)=\d+).*(&bm=\d+)|((^bm|&bm)=\d+).*(&sp=\d+)/ 这样应该满足
一看就知道不对啊,你2个参数中间的.*没有对url合法性做校验。[/quote] ?[/quote] 我要的效果 是 相当于一个方法 function checkstr(str){ //伪代码如下 1.这个字符串url必须包含bm和sp参数 2.这个字符串必须是合法的querystring也就是 ?后面的东西 if(满足上面条件){ return ture } else{ return false } }[/quote] 既然是在PHP里面处理那就简单了啊,我还以为是在nginx 或者apache 里面使用呢 用这个函数 解析一下在判断是否存在 就行了 https://www.php.net/manual/zh/function.parse-str.php
董哥007 2020-07-21
  • 打赏
  • 举报
回复
引用 4 楼 下雨的声音丶 的回复:
[quote=引用 3 楼 董哥007 的回复:][quote=引用 2 楼 下雨的声音丶 的回复:]/((^sp|&sp)=\d+).*(&bm=\d+)|((^bm|&bm)=\d+).*(&sp=\d+)/ 这样应该满足
一看就知道不对啊,你2个参数中间的.*没有对url合法性做校验。[/quote] ?[/quote] 我要的效果 是 相当于一个方法 function checkstr(str){ //伪代码如下 1.这个字符串url必须包含bm和sp参数 2.这个字符串必须是合法的querystring也就是 ?后面的东西 if(满足上面条件){ return ture } else{ return false } }
下雨的声音丶 2020-07-21
  • 打赏
  • 举报
回复
引用 3 楼 董哥007 的回复:
[quote=引用 2 楼 下雨的声音丶 的回复:]/((^sp|&sp)=\d+).*(&bm=\d+)|((^bm|&bm)=\d+).*(&sp=\d+)/ 这样应该满足
一看就知道不对啊,你2个参数中间的.*没有对url合法性做校验。[/quote] ?
董哥007 2020-07-21
  • 打赏
  • 举报
回复
引用 2 楼 下雨的声音丶 的回复:
/((^sp|&sp)=\d+).*(&bm=\d+)|((^bm|&bm)=\d+).*(&sp=\d+)/ 这样应该满足
一看就知道不对啊,你2个参数中间的.*没有对url合法性做校验。
下雨的声音丶 2020-07-21
  • 打赏
  • 举报
回复
/((^sp|&sp)=\d+).*(&bm=\d+)|((^bm|&bm)=\d+).*(&sp=\d+)/ 这样应该满足
热心的码农 2020-07-21
  • 打赏
  • 举报
回复
explode 分数组去判断吧,简单很多

21,890

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧