【问题标题】:Regular expression to check for two characters正则表达式检查两个字符
【发布时间】:2011-12-05 21:19:11
【问题描述】:

我想检查一下 值为“H”或“T” 否则它可以是'H' 否则它可以是'T' 或同时使用“H”和“T”

这一切都存储在一个数组中

我正在使用这个正则表达式来检查这两个词。

$combo  = preg_match('[HT]',strtoupper($_REQUEST['combo']));

如果值为 HT ,它会给我成功。如果我只输入“H”或“T”......或重复出现“H”或“T”,它不满足上面的代码。

希望这可以帮助您理解...一个简单的抛硬币游戏,有两种可能的结果是“H”-正面和“T”-反面.....用户总共可以玩 9 轮... $ combo 正在存储仅包含 H 和 T 的组合...我正在从我得到的 url 检查 php 调用,例如:- www.domain-name.com/submit_combo_predisc.php/?prefix=p&uid=username&txn=9574621083&combo =HH‌​H&k=29c3550e430723e5c61a66bd03ba4ff5....

这里用户有三个正确的输入,他赢得了一定数量的三个组合权。如果我在 URL 中输入“HH4”而不是“HHH”,它仍然显示你有三个组合权并且用户获得了一定的数量为了使三个组合正确......这实际上是错误的......因为传递的值是'HH4'......n不是'HHH'。 用户实际上可以滥用网址来赢得无限量....

【问题讨论】:

  • 您也可以通过在正则表达式中使用/i 标志来跳过strtoupper

标签: php regex preg-match preg-match-all


【解决方案1】:
$combo  = preg_match('/^(H|T|HT)$/',strtoupper($_REQUEST['combo']));

这匹配 H、T 和 HT。

如果你也想匹配 TH,

$combo  = preg_match('/^[HT]{1,2}$/',strtoupper($_REQUEST['combo']));

是更好的选择。

【讨论】:

    【解决方案2】:

    正则表达式必须是

    '^[HT]{1,2}$'
    

    这允许以下值:'H'、'T'、'HT'、'TH'、'HH' 和 'TT',但仅此而已!

    【讨论】:

      【解决方案3】:
      $combo  = preg_match('/[HhTt]/',$_REQUEST['combo']); 
      

      【讨论】:

        【解决方案4】:

        您想为此使用量词。 {1,2} 可以工作:

         preg_match('/^[HT]{1,2}$/'
        

        请注意,您的正则表达式也缺少分隔符。这就是为什么它只匹配 HT - 因为方括号被解释为分隔符而不是字符组。


        似乎您真正想要(但从未说过)是计算Hs 和Ts 的数量。那么更简单的方法是:

         $combo = strlen(preg_replace('/[^HT]/i', "", $_REQUEST['combo']));
        

        【讨论】:

        • 计数器识别为 1,即使它的 HHHHHHH 或 HTHTHTHT 或 TTTHHH 它没有增加它应该计算组合的数量,如 'HHHHHHH' 计数应该是 7..
        • preg_match 不返回字符串长度。不要使用该作业。使用第三个 $match 参数和 strlen(),正如你之前所说的那样。
        • 我在后面的代码中使用了strlen函数'$count = strlen($combo); if($count == 1){ $combo = "combo"; } 其他{ $combo = "组合"; }'
        • 如果我不使用这个 $combo = preg_match_all('/[HT]{1,9}/','HT',strtoupper($_REQUEST['combo'])); preg 语句它完美地返回了我的计数..
        • 详细说明你的问题,以便我理解。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多