From: William James Date: 2007-01-14T13:35:18+09:00 Subject: Re: checking if a string matches a regexp - am I missing something? Rob Sanheim wrote: > On 1/13/07, James Edward Gray II wrote: > > On Jan 13, 2007, at 9:43 PM, Rob Sanheim wrote: > > > > > I figure that I must be missing something really obvious with this > > > question. But here goes: > > > > > > I want to know if a string matches a regular expression. I don't care > > > where the match begins, I don't want a matchdata object, I don't want > > > to check for nil, I just want a boolean indicating if a string matches > > > a regexp. And I want this to be one method call. From what I can > > > tell, this is the closest I can get: > > > > > > ("string" =~ reg) >= 0 # ugly > > > > Just drop the noise: > > > > "string" =~ reg # => int results are +true+ and nil is +false+ > > > > Hope that helps. > > > > True...but here is a cleaned up version of the place where I tried to do that: > > def valid_query? > # query is a string accessor > if query_is_plain_text? > is_valid = valid_query_length? && (query =~ regex) > else > is_valid = query_is_url? > end > is_valid > end > > So of course, when it was both a valid query and had a valid length, > it would return zero because it matched the start of the regexp. The > caller of the method wanted true or false only, not zero. Who wrote a caller that wanted true or false only, and why? What does the caller do when it receives 0? irb(main):002:0> puts 'yeah' if true yeah => nil irb(main):003:0> puts 'yeah' if 0 yeah => nil irb(main):004:0> puts 'yeah' if false => nil If you actually have a caller written so mindlessly that it only works with true or false: !!(is_valid = valid_query_length? && (query =~ regex) )