[英]Ruby - validate user input against allowed characters
我被困在驗證用戶輸入。 我已經設置了允許的字符“ RGBY”,我正在要求用戶輸入。 我想驗證用戶是否僅輸入允許的字符(“ RGBY”)。
用戶可以輸入他或她想要的任何內容,只要輸入包含允許的字符即可,例如:
user_input1 = "R R R Y"
user_input2 = "Y Y B G"
等等...
我完全被卡住了,我嘗試使用正則表達式:
/[RGBY]/
如果用戶輸入允許的字符,則工作正常,但如果混合使用允許和不允許的字符,則regex不會捕獲它:(例如:
wrong_user_input = "Z Z R Y"
我知道正則表達式對於這個簡單的任務來說過於矯kill過正,但是我暫時無法想到其他事情。 任何幫助將不勝感激....謝謝!
使用/^[RGBY ]+$/
作為模式,以便從開頭(^)到結尾($)(不是部分),整個字符由允許的字符(R,G,B,Y或空格)組成:
>> "Z Z R Y" =~ /^[RGBY ]+$/
=> nil
>> "R R R Y" =~ /^[RGBY ]+$/
=> 0
前不久有一個相關的問題,這是最快的解決方案:
"Z Z R Y".count("^RGBY ") == 0
#=> false
"R G R Y".count("^RGBY ") == 0
#=> true
它計算不是R,G,B,Y
或空格的字符。
這里有更多方法,其中一些不使用正則表達式。
否定:字符串包含"R"
, "G"
, "B"
, "V"
和" "
以外的字符
!('Z Z R Y' =~ /[^RGBY ]/) #=> false
!('R R R Y' =~ /[^RGBY ]/) #=> true
這避免了錨定的需要。
使用String#delete刪除目標字符,然后查看是否還有任何字符
'Z Z R Y'.delete('RGBY ').empty? #=> false
'R R R Y'.delete('RGBY ').empty? #=> true
一種變體是使用String#tr :
'Z Z R Y'.tr('RGBY ', '').empty? #=> false
'R R R Y'.tr('RGBY ', '').empty? #=> true
另一種是將String#gsub與正則表達式一起使用:
'Z Z R Y'.gsub(/[RGBY ]/, '').empty? #=> false
'R R R Y'.gsub(/[RGBY ]/, '').empty? #=> true
將字符串轉換為字符數組並使用邏輯比較
arr = ['R', 'G', 'B', 'Y', ' ']
('Z Z R Y'.chars - arr).empty? #=> false
('R R R Y'.chars - arr).empty? #=> true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.