我想检查一下 值是'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'。 用户实际上可以滥用网址来赢取无限金额....
答案 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
- 因为方括号被解释为分隔符而不是字符组。
似乎你真正想要的(但从未说过)是计算H
和T
的数量。那么更简单的方法是:
$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']);