Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Pattern match to fail if two periods in a row

Reply
Thread Tools

Pattern match to fail if two periods in a row

 
 
Ralph Shnelvar
Guest
Posts: n/a
 
      11-26-2009
Ok ... I really tried. And I used http://rubular.com/ (really nice)

And I read and reread the pickaxe book section on regular
expressions.

In other words ... I tried.

So ..

How does one create an expression that fails if there are two or more periods
(e.g. "..") in a row?


 
Reply With Quote
 
 
 
 
Jesús Gabriel y Galán
Guest
Posts: n/a
 
      11-26-2009
On Thu, Nov 26, 2009 at 8:51 PM, Ralph Shnelvar <(E-Mail Removed)> wrote:
> Ok ... I really tried. =A0And I used http://rubular.com/ =A0(really nice)
>
> And I read and reread the pickaxe book section on regular
> expressions.
>
> In other words ... I tried.
>
> So ..
>
> How does one create an expression that fails if there are two or more per=

iods
> (e.g. "..") in a row?


>> "abc..def" !~ /\.\./

=3D> false

One easy way is to use the negated match operator (!~). Then the
regexp is trivial.

Jesus.

 
Reply With Quote
 
 
 
 
Louis-Philippe
Guest
Posts: n/a
 
      11-26-2009
[Note: parts of this message were removed to make it a legal post.]

if ! /\.{2,}/

or something

2009/11/26 Ralph Shnelvar <(E-Mail Removed)>

> Ok ... I really tried. And I used http://rubular.com/ (really nice)
>
> And I read and reread the pickaxe book section on regular
> expressions.
>
> In other words ... I tried.
>
> So ..
>
> How does one create an expression that fails if there are two or more
> periods
> (e.g. "..") in a row?
>
>
>


 
Reply With Quote
 
Ralph Shnelvar
Guest
Posts: n/a
 
      11-26-2009

>>> "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'





 
Reply With Quote
 
Louis-Philippe
Guest
Posts: n/a
 
      11-26-2009
[Note: parts of this message were removed to make it a legal post.]

so then only trying to match:

/\w+\.?\w*/

should do

2009/11/26 Ralph Shnelvar <(E-Mail Removed)>

>
> >>> "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'
>
>
>
>
>
>


 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      11-27-2009
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/
 
Reply With Quote
 
Aldric Giacomoni
Guest
Posts: n/a
 
      11-27-2009
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/.

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      11-27-2009
2009/11/27 Aldric Giacomoni <(E-Mail Removed)>:
> 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/

 
Reply With Quote
 
Aldric Giacomoni
Guest
Posts: n/a
 
      11-27-2009
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/.

 
Reply With Quote
 
Steve Wilhelm
Guest
Posts: n/a
 
      11-28-2009
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/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
qr makes pattern match fail it_says_BALLS_on_your forehead Perl Misc 4 08-17-2006 07:50 PM
Finding row number for a Java regexp pattern match ken1@tjohoo.se Java 2 02-08-2006 11:24 PM
ok I can do a totals row but how about a percentage row after each data row D ASP .Net Datagrid Control 0 05-23-2005 04:10 PM
Do routers normally drop connections after idle periods? Bartt Wireless Networking 6 12-12-2004 03:35 AM
if (f() != FAIL) or if (FAIL != f())? Wenjie C Programming 3 07-31-2003 09:54 PM



Advertisments