【问题标题】:Regular expression for fixed string固定字符串的正则表达式
【发布时间】:2010-10-13 13:24:11
【问题描述】:

我有以下字符串。

?page=1&sort=desc&param=5&parm2=25

我需要检查输入字符串 url 是否为严格格式,除了变量值。 比如 page=, sort=, param=, param2。

请推荐正则表达式。 谢谢

【问题讨论】:

  • 我也想要数组数组中的变量('page'=>1,'sort'=>'desc','param'=5,'param2'=25)
  • 我认为 preg_match 会起作用,但我想要精确的正则表达式

标签: php regex query-string


【解决方案1】:

您应该使用parse_str 并检查您想要的所有参数是否都使用isset 设置。正则表达式不是这里的方法。

【讨论】:

    【解决方案2】:

    也许是这样的:

    \?page=\d+&sort=.+&param=\d+&param2=\d+
    

    翻译成:

    ?page= followed by any digit repeated 1 or more times

    &sort= followed by any character repeated 1 or more times

    &param= followed by any digit repeated 1 or more times

    &param2= followed by any digit repeated 1 or more times

    我认为 Alin Purcaru 的建议更好

    编辑:

    (\?|&)(page=[^&]+|sort=[^&]+|param=[^&]+|parm2=[^&]+)
    

    这样顺序无关紧要

    【讨论】:

    • 可以,但是参数的顺序可以改变
    • @Rahul 我不记得你在你的问题中指定了这一点
    • 如果可以使用更具体的[^&]+,请不要使用通用的.+
    【解决方案3】:

    如果你关心参数的顺序,像这样:

    \?page=[^&]+&sort=[^&]+param=[^&]+param2=[^&]+$
    

    但是 Alin Purcaru 是对的 - 使用已经编写的 parse_str 函数来执行此操作

    【讨论】:

      【解决方案4】:

      只要你的值是字母数字,正则表达式就是^\?([\w\d]+=[\w\d]+(|&))*$,但如果你想验证一个url http://www.php.net/manual/en/book.filter.php,也许你想看看过滤器

      【讨论】:

        【解决方案5】:

        您可以使用以下 regx /\?page=[^&]*sort=[^&]*param=[^&]*param2=/` 来匹配:

        if (preg_match("/\?page=([^&]*)sort=([^&]*)param=([^&]*)param2=([^&]*)/i", $inputstr, $matches))
        {
           echo "Matches:";
           print_r($matches);     // matches will contain the params
        
        }
        else
           echo "Params nor found, or in wrong order;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-12
          • 2012-11-04
          • 1970-01-01
          • 2018-11-24
          相关资源
          最近更新 更多