2011-02-01 19 views
7

我不能完全弄清楚我在做什麼錯在這裏返回一個布爾值..如何從正則表達式

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

我不是這樣做的權利?

+0

測試代碼時,除了「DC-000044-10」或「DC-67-09」之外,它實際上返回「nil」(相當於if/else語句的「false」 ... – 2011-02-01 02:59:48

回答

32

這是一個班輪:

@calc.lda = !!(@calc.docket_num =~ /DC-000044-10|DC-67-09/) 

!!強制真/假,然後就可以直接分配你的布爾變量的響應。

+2

+1使用`!!`。正則表達式可能會更緊張:`/ DC - (?: 000044-10 | 67-09)/` – 2011-02-01 04:34:41

+4

太棒了。從來不知道`!!`。 – CambridgeMike 2012-04-18 03:47:59

2

我認爲這個問題是在你的實現中的其他地方。使用此代碼來檢查它:

 
k = 'random information' 

if k =~ /DC-000044-10/ || k =~ /DC-67-09/ 
    puts 'success' 
else 
    puts 'failure' 
end 

=> failure 
+2

這可以使用三元運算符縮短:`puts(k =〜/ DC - (?000044-10 | 67-09)/)? '成功':'失敗' – 2011-02-01 04:38:39

4

或者,您可以使用Regexp類的triple equals(===)運算符,用於在使用case語法時確定相等性。

@calc.lda = /DC-000044-10|DC-67-09/ === @calc.docket_num 
@calc.lda 
=> true 

提防

/Regexp/ === StringString === /Regexp/完全不同!!!!該方法不可交換。每個班級實施===的方式不同。對於上面的問題,正則表達式必須在===的左邊。

對於Regexp實現,您可以看到更多關於此的文檔(截至Ruby 2.2.1)here