簡體   English   中英

Ruby-根據允許的字符驗證用戶輸入

[英]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.

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