From: Robert Klemme on
On 11/26/2009 09:46 PM, Ralph Shnelvar wrote:
>>>> "abc..def" !~ /\.\./
> =>> false
>
> I don't think that
> "abc..def" !~ /\.\./
> is a regular expression.
>
> /\.\./
> is a regular expression.
>
>
> Basically ... I need something that will work in a Rails validates_format_of
>
> # Reject if the email address has two periods in a row
> validates_format_of :email,
> # See http://en.wikipedia.org/wiki/E-mail_address
> :with => ????,
> :message => 'invalid email format'

You could try negative lookahead

irb(main):001:0> s=["aaa", "a.", ".a", "a..", "..a"]
=> ["aaa", "a.", ".a", "a..", "..a"]
irb(main):002:0> s.map {|x| [x, /\A(?:.(?!\.\.))*\z/ =~ x]}
=> [["aaa", 0], ["a.", 0], [".a", 0], ["a..", nil], ["..a", 0]]

Or maybe there is an ":without" which uses the negated match?

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
From: Aldric Giacomoni on
Ralph Shnelvar wrote:
> How does one create an expression that fails if there are two or more
> periods
> (e.g. "..") in a row?

As previously mentioned, you can use this:
/\.{2,}/
You can also use this:
/[..+]/

Though of course, you -want- to get 'nil' instead of a match.

On the other hand, if you are looking to validate an email address,
there are already rails plugins that do that (and more) - so why
reinvent the wheel? :)
--
Posted via http://www.ruby-forum.com/.

From: Robert Klemme on
2009/11/27 Aldric Giacomoni <aldric(a)trevoke.net>:
> Ralph Shnelvar wrote:
>> How does one create an expression that fails if there are two or more
>> periods
>> (e.g. "..") in a row?
>
> As previously mentioned, you can use this:
> /\.{2,}/

That only positively matches strings which contain at least two dots
in a row. OP specifically wanted to _not_ have a match for two dots
in a row.

> You can also use this:
> /[..+]/

Did you test that? How should this expression match two dots in a
row? You have define a character class with "." and "+" where one dot
is redundant.

irb(main):001:0> /[..+]/ =~ "+"
=> 0
irb(main):002:0> /[..+]/ =~ "."
=> 0

> On the other hand, if you are looking to validate an email address,
> there are already rails plugins that do that (and more) - so why
> reinvent the wheel? :)

If he's reinventing the wheel then that's certainly not a good idea.
I just guess that you are talking about a different wheel. :-)

Kind regards

robert


--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

From: Aldric Giacomoni on
Robert Klemme wrote:

>> You can also use this:
>> /[..+]/
>
> Did you test that? How should this expression match two dots in a
> row? You have define a character class with "." and "+" where one dot
> is redundant.
>
> irb(main):001:0> /[..+]/ =~ "+"
> => 0
> irb(main):002:0> /[..+]/ =~ "."
> => 0

I did test it. Just not well. :(
--
Posted via http://www.ruby-forum.com/.

From: Steve Wilhelm on
Ralph Shnelvar wrote:

> Basically ... I need something that will work in a Rails
> validates_format_of
>
> # Reject if the email address has two periods in a row
> validates_format_of :email,
> # See
> http://en.wikipedia.org/wiki/E-mail_address
> :with => ????,
> :message => 'invalid email format'

From http://github.com/alexdunae/validates_email_format_of

Regex = Regexp.new('^((' + LocalPartUnquoted + ')|(' + LocalPartQuoted +
')+)@(((\w+\-+[^_])|(\w+\.[^_]))*([a-z0-9-]{1,63})\.[a-z]{2,6}$)',
Regexp::EXTENDED | Regexp::IGNORECASE)
--
Posted via http://www.ruby-forum.com/.