Alle 22:21, domenica 19 novembre 2006, Luca Scaljery ha scritto:
Hi All
I just tried to test the content of a string, something like this:
c = "1234AA"
if c.scan( /1234567890/ )
p "OK"
else
p "NO"
end
This always returns "OK"
Any suggestions what goes wrong here. And is this the way to check the
content of a string ?
Thanks a lot
LuCa
Even when there's no match, String#scan returns an array, so your is always
true. To make it work, you should use
if !c.scan(/1234567890/).empty?
As for your second question, it depends on what exactly you want to do. It is
the correct form if you need to get all the numbers in the string, regardless
of their position or any other thing (by the way, if you want to match a
digit in a regexp, you can use /\d/). If you simply want to check whether the
string contains a digit, you can use String#match or =~ with the /\d/ regexp.
If you need more control on the scanning, you can use the StringScanner
class.
I just tried to test the content of a string, something like this:
c = "1234AA"
if c.scan( /1234567890/ )
p "OK"
else
p "NO"
end
This always returns "OK"
Any suggestions what goes wrong here. And is this the way to check the
content of a string ?
Thanks a lot
LuCa
(i think) the reason you always get OK, is because the if c.scan always
returns a true value (the scan method always takes place) (i.e, it never
returns nil/false)...i don't know exactly what method you need, but
first of all check out http://rubycentral.com/book/ref_c_string.html#String.scan to see that it
returns either an array or a string, and second of all maybe, check out,
Regexp#=~ , maybe that is better?
0 , '0', '''', an empty array, or an empty hash all evaluate to true
Saying it's a "gotcha" makes it sound like the behavior is wrong. Some
would say that only false should be false. Me, I like that nil is
false, but I sure as hell don't want 0 or '' or or {} to be false.
It behaves well -- that's not a gotcha -- that's just good common sense.
I can't quite tell what you're looking for exactly, but String#match is
probably it. (I don't like the =~ perlism myself).
0 , '0', '''', an empty array, or an empty hash all evaluate to true
Saying it's a "gotcha" makes it sound like the behavior is wrong. Some
would say that only false should be false. Me, I like that nil is
false, but I sure as hell don't want 0 or '' or or {} to be false.
It behaves well -- that's not a gotcha -- that's just good common sense.
I can't quite tell what you're looking for exactly, but String#match is
probably it. (I don't like the =~ perlism myself).
I don't either, but I've reluctantly had to accept that it's faster
than #match, at least in the comparisons I've seen. Of course that
doesn't matter unless it matters, so to speak.