Need some help with regular expression

I need to validate a string from a user (a location for use with
geotagging) that is. I want to make sure that the user specify a city
and a country in my inp ... So i wrote this =>

  validates :usri_location,
            :presence => true,
            :format => {:with => /^[a-zA-Z]+{\,\s}+[a-zA-Z]/i},
            :on => :create

I want to make sure that the user writes city, country

city + ", " + country

but all i get is (invalid) some one with more experience with regex
wanting to help out or show me in a direction.
(spent the last hour trying code from http://www.regular-expressions.info/reference.html
but i can't get it to work ...

/Niklas.

The way I tackle this sort of problem is to start with a simple regex
and slowly build it up. So you could start with just expecting alpha
characters and check that it accepts the city ok, then add the
expected comma, and so on.

Colin

I need to validate a string from a user (a location for use with
geotagging) that is. I want to make sure that the user specify a city
and a country in my inp ... So i wrote this =>

validates :usri_location,
           :presence => true,
           :format => {:with => /^[a-zA-Z]+{\,\s}+[a-zA-Z]/i},

You have {} instead of () around the , and \s. Also, I don't believe the ',' has to be escaped (it didn't work with it escaped and it does if i remove the escaping. With those 2 issues fixed it works for me on rubular.

           :on => :create

I want to make sure that the user writes city, country

city + ", " + country

but all i get is (invalid) some one with more experience with regex
wanting to help out or show me in a direction.

The way I tackle this sort of problem is to start with a simple regex
and slowly build it up. So you could start with just expecting alpha
characters and check that it accepts the city ok, then add the
expected comma, and so on.

Colin

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Juan Alvarado

Try using http://rubular.com/. I use this a lot because it's fast (most of the time) and interactive.

**Leigh

Juan Alvarado wrote in post #1016383:

I need to validate a string from a user (a location for use with
geotagging) that is. I want to make sure that the user specify a city
and a country in my inp ... So i wrote this =>

validates :usri_location,
           :presence => true,
           :format => {:with => /^[a-zA-Z]+{\,\s}+[a-zA-Z]/i},

You have {} instead of () around the , and \s. Also, I don't believe
the ',' has to be escaped (it didn't work with it escaped and it does if
i remove the escaping. With those 2 issues fixed it works for me on
rubular.

Also \s matches tabs and newlines, so your regex would match things
like:

xxxx, yyyy

and

xxxx,
yyy

so if you just want to match a space, then use a space in your regex:

/[a-zA-Z]+, [a-zA-z]+/

Thanks - this is a bookmark from now on...

Thanks for all help!

Thanks :slight_smile:

Just be aware that with that regular expression you are not allowing cities which names contains white spaces. New York, USA is not going to match.
Also non standard ascii characters are not going to match (this could or could not be a problem depending on the language and city names for the countries you need to validate).

Apart of the regular expression, if you must be sure the input correspond to a “city, country” string you could also have cities and countries tables and check that the input is in your tables. Otherwise a string like “AAA, AAA” will match.