我不能完全弄清楚我在做什麼錯在這裏返回一個布爾值..如何從正則表達式
if @calc.docket_num =~ /DC-000044-10/ || @calc.docket_num =~ /DC-67-09/
@calc.lda = true
else
@calc.lda = false
end
但似乎@calc.docket_num
可以是任何字符串無論如何,它總是爲返回true
。
我不是這樣做的權利?
我不能完全弄清楚我在做什麼錯在這裏返回一個布爾值..如何從正則表達式
if @calc.docket_num =~ /DC-000044-10/ || @calc.docket_num =~ /DC-67-09/
@calc.lda = true
else
@calc.lda = false
end
但似乎@calc.docket_num
可以是任何字符串無論如何,它總是爲返回true
。
我不是這樣做的權利?
這是一個班輪:
@calc.lda = !!(@calc.docket_num =~ /DC-000044-10|DC-67-09/)
的!!
強制真/假,然後就可以直接分配你的布爾變量的響應。
+1使用`!!`。正則表達式可能會更緊張:`/ DC - (?: 000044-10 | 67-09)/` – 2011-02-01 04:34:41
太棒了。從來不知道`!!`。 – CambridgeMike 2012-04-18 03:47:59
我認爲這個問題是在你的實現中的其他地方。使用此代碼來檢查它:
k = 'random information' if k =~ /DC-000044-10/ || k =~ /DC-67-09/ puts 'success' else puts 'failure' end => failure
這可以使用三元運算符縮短:`puts(k =〜/ DC - (?000044-10 | 67-09)/)? '成功':'失敗' – 2011-02-01 04:38:39
或者,您可以使用Regexp類的triple equals(===
)運算符,用於在使用case
語法時確定相等性。
@calc.lda = /DC-000044-10|DC-67-09/ === @calc.docket_num
@calc.lda
=> true
提防
/Regexp/ === String
比String === /Regexp/
完全不同!!!!該方法不可交換。每個班級實施===
的方式不同。對於上面的問題,正則表達式必須在===
的左邊。
對於Regexp實現,您可以看到更多關於此的文檔(截至Ruby 2.2.1)here。
測試代碼時,除了「DC-000044-10」或「DC-67-09」之外,它實際上返回「nil」(相當於if/else語句的「false」 ... – 2011-02-01 02:59:48