簡體   English   中英

正則表達式檢查兩個字符

[英]Regular expression to check for two characters

我想檢查值是'H'還是'T',否則它可能是'H',它可以是'T'或'H'和'T'

這一切都存儲在一個數組中

我正在使用這個正則表達式來檢查這兩個單詞。

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

如果值為HT,它會給我成功。 如果我只是'H'或'T'......或反復出現'H'或'T',它就不符合上述代碼。

希望這可以幫助你理解...一個簡單的投幣游戲有兩個可能的'H' - 頭和'T'尾...用戶可以玩9輪所有... $組合存儲這個組合只包含H和T ......我在這里檢查一個來自url的php調用,例如: - www.domain-name.com/submit_combo_predisc.php/?prefix=p&uid=username&txn=9574621083&combo=HH H&K = 29c3550e430723e5c61a66bd03ba4ff5 ....

這里用戶有三個輸入正確,他贏得一定數量的三個組合權。如果我輸入'HH4'而不是'HHH',它仍然顯示你有三個組合權利,用戶有一定數量獲得正確的三種組合....這實際上是錯誤的....因為傳遞的值是'HH4'...... n不是'HHH'。 用戶實際上可以濫用網址贏取無限量....

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

這匹配H,T和HT。

如果你想匹配TH,

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

是更好的選擇。

你想使用量詞。 {1,2}可行:

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

請注意,您的正則表達式也缺少分隔符。 這就是為什么它只與HT匹配 - 因為方括號被解釋為分隔符而不是字符組。


似乎你真正想要的(但從未說過)是計算H s和T s的數量。 那么更簡單的方法是:

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

正則表達式必須是

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

這允許以下值:'H','T','HT','TH','HH'和'TT',但沒有別的!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM