2011-09-09 18 views
18

E-posta kullanımı için doğru veya yanlış döndüren bir test oluşturmak istiyorum. E-posta adresi r ile başlar + sonra eğer doğruysa ŞimdilikBir eşleşme var mı, raylarda doğru veya yanlış bir dönüş olup olmadığını nasıl belirleyebilirim?

, aksi takdirde yanlış. Bu, sunucumuzun vurduğumuz bir çok SPAM'ı ihmal etmesine yardımcı olacaktır.

Örnekler:

[email protected] .. true 
[email protected] .. true 
[email protected] .. FALSE 

Raylar/yakut/regex ile bu işlemek için en etkili yolu nedir? Rails iseniz

ABORT if XXXXX == 0 

cevap

33

Bu maç olacak:

/^r\+.*@site.com$/ 

Örnekler:

>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0 
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> nil 

değil nil veya false Ruby truthy olduğu her şeyi olduğundan, Bu regex'i bir koşulda kullanabilir. Eğer gerçekten bir boolean istiyorsanız !! deyim kullanabilirsiniz:

>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> false 
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> true 
+0

teşekkür nil' beklenmedik $ tanımsız, bekliyor ')' (SyntaxError) eğer – AnApprentice

+0

son fikir çalıştı eğer, sözdizimi hatası o kurşun ABORT ama ben raylar içinde bunu nasıl/yakut böylece – AnApprentice

+0

bu çalışma almak için hala mümkün değildir, denenmiş (params [: to] .to_s = ~ (/^r\+.*@site.com$/)) = = sözdizimi hatası için üzgünüm – AnApprentice

10

, bir starts_with var:

ile raylar içinde bir liner/yakut mı

Teşekkür

HEDEF? dizeleri üzerinde yöntemi: Raylar dışında

"foo".starts_with?('f') # => true 
"foo".starts_with?('g') # => false 

, regexes makul çözümdür:

"foo" =~ /^f/ # => true 
"foo" =~ /^g/ # => false 

Yakut sen Regexes kullanarak sonuna yaparsanız tablolar, sadece geri dönüşü kullanabilirsiniz eğer truthiness kullandığından her zaman kullanabilirsiniz, çift patlama hile bir yöntem yazıyorsanız

if "foo" =~ /^f/ 
    puts "Was true!" 
else 
    puts "Was false!" 
end 

ve bir boolean bir sonuç dönmek istiyorum: değeri geçmek için

def valid_email? 
    !!("foo" =~ /^f/) 
end 

Rubular (rubular.com), Ruby regex'lerini 1.9'dan önce test etmek için iyi bir sitedir. (1.9 en regexes lookahead gibi şeyler eklendi.)

+0

dışında "start_with?" (Tekil dikkat edin). –

+0

Start_with düşüncesinden hoşlandığımdan emin değilim, sadece r ile eşleşmez ve r + ile eşleşmez, bu da spam yapanlara karşı çok daha yararlı olur – AnApprentice

+0

Neden start_with yapamazdınız? "R +" '? Yani bir regex kullanırdım, bu yüzden bir + + 'dan önce bir şeyle eşleşebilir, ama start_with? ne verirsen eşleşecek. –

8

siz "bir kullanmak istemiyorsanız !!"Operatör:

!!("foo" =~ /^f/) 

sen (kudreti daha belirgin görünüyor) bir üçlü operatörü kullanabilirsiniz:

"foo" =~ /^f/ ? true : false 
6

Sen '===' operatörünü yanı

/f/ === 'foo' #=> true 

/f/ === 'bat' #=> false 
kullanabilirsiniz

Not:

: regex kısmı solda 10

/YOUR_REGEX/=== 'YOUR_STRING' String de var Rayların

İlgili konular