正则表达式检查两个字符

时间:2011-10-12 07:00:58

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

我想检查一下 值是'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&安培;组合= HH H&安培; K = 29c3550e430723e5c61a66bd03ba4ff5 ....

这里用户有三个输入正确,他赢得了一定数量的三个组合权。如果我输入'HH4'而不是'HHH'它仍然显示你有三个组合权利和用户给予一定数量让三个组合正确....这实际上是错误的....因为传递的值是'HH4'... n不是'HHH'。 用户实际上可以滥用网址来赢取无限金额....

4 个答案:

答案 0 :(得分:4)

$combo  = preg_match('/^(H|T|HT)$/',strtoupper($_REQUEST['combo']));

这匹配H,T和HT。

如果你想匹配TH,

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

是更好的选择。

答案 1 :(得分:3)

您想要使用量词。 {1,2}可行:

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

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


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

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

答案 2 :(得分:3)

正则表达式必须

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

这允许以下值:'H','T','HT','TH','HH'和'TT',但没有别的!

答案 3 :(得分:3)

$combo  = preg_match('/[HhTt]/',$_REQUEST['combo']);