RegExp issues

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However,
when I type in 'hello' in the field, it says that it doesn't match the
regexp, yet I'm sure that reg exp works for letters, numbers, and
underscores only. What am I doing wrong? Thanks for your help and time.

···

--
Posted via http://www.ruby-forum.com/.

Ben V. wrote:

I am trying to validate user input so it contains only letters, numbers, underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However, when I type in 'hello' in the field, it says that it doesn't match the regexp, yet I'm sure that reg exp works for letters, numbers, and underscores only. What am I doing wrong? Thanks for your help and time.

Shouldn't your regexp accept lowercase as well? /[A-Za-z0-9_-]/?

Or you could simplify things a bit and use \w, which matches word characters, and \d, which matches digits?

[\w\d_-]

You need to validate lowercase also: /[A-Za-z0-9_-]/

···

On Sat, 2 Sep 2006 10:57:57 +0900 "Ben V." <comprug@gmail.com> wrote:

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However,
when I type in 'hello' in the field, it says that it doesn't match the
regexp, yet I'm sure that reg exp works for letters, numbers, and
underscores only. What am I doing wrong? Thanks for your help and time.

--
Posted via http://www.ruby-forum.com/\.

That regexp doesn't match lowercase characters.

input =~ /\A[\w-]+\Z/ is probably better.

···

On Sep 1, 2006, at 6:57 PM, Ben V. wrote:

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However,
when I type in 'hello' in the field, it says that it doesn't match the
regexp, yet I'm sure that reg exp works for letters, numbers, and
underscores only. What am I doing wrong? Thanks for your help and time.

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Ben V. wrote:

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However,
when I type in 'hello' in the field, it says that it doesn't match the
regexp, yet I'm sure that reg exp works for letters, numbers, and
underscores only. What am I doing wrong? Thanks for your help and time.

You are not accepting lowercase characters.

For convenience, try this:

/\w-/

The special token \w translates into "A-Za-z0-9_", IOW uppercase and
lowercase letters, numbers, and underscore, leaving only the dash to be
included explicitly.

···

--
Paul Lutus
http://www.arachnoid.com

There are many more letters than [A-Za-z]. You should either be explicit that you're testing only the ASCII subset, or be prepared to fail the first time someone includes the word 'café'. And are you OK with '—' as well as '-'? -Tim

···

On Sep 1, 2006, at 6:57 PM, Ben V. wrote:

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/

Ben V. <comprug <at> gmail.com> writes:

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However,
when I type in 'hello' in the field, it says that it doesn't match the
regexp, yet I'm sure that reg exp works for letters, numbers, and
underscores only. What am I doing wrong? Thanks for your help and time.

No one else seems to have mentioned that that regex will match all strings
/conatining/ a letter, digit hyphen or underscore:

irb(main):001:0> /[A-Z0-9_-]/ =~ "£$%^"
=> nil
irb(main):002:0> /[A-Z0-9_-]/ =~ "£$0%^"
=> 2

You probably want something like

/^[\w-]+$/

Gareth

\w matches digits too

'0' =~ /\w/ # => 0

···

On Sep 1, 2006, at 7:14 PM, Timothy Hunter wrote:

Ben V. wrote:

I am trying to validate user input so it contains only letters, numbers, underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However, when I type in 'hello' in the field, it says that it doesn't match the regexp, yet I'm sure that reg exp works for letters, numbers, and underscores only. What am I doing wrong? Thanks for your help and time.

Shouldn't your regexp accept lowercase as well? /[A-Za-z0-9_-]/?

Or you could simplify things a bit and use \w, which matches word characters, and \d, which matches digits?

[\w\d_-]

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Shouldn't your regexp accept lowercase as well? /[A-Za-z0-9_-]/?

Yep, that was the issue, as someone coming from a Coldfusion backround,
I'm not that familiar with RegExps, but that's good to know that you can
just use /w, and /d... Thanks for your help and time.

···

--
Posted via http://www.ruby-forum.com/\.

Timothy Hunter wrote:

Or you could simplify things a bit and use \w, which matches word characters, and \d, which matches digits?

I could've sworn digits are word characters too.

irb(main):001:0> /\w/ =~ "1"
=> 0

Ruby seems to agree.

David Vallner

For convenience, try this:

/\w-/

The special token \w translates into "A-Za-z0-9_", IOW uppercase and
lowercase letters, numbers, and underscore, leaving only the dash to be
included explicitly.

That definetly is much easier, like I said before, I am no expert at
RegEXP. I am trying to modify an image within a custom directory
created with the person's username, and because Rmagick doesn't seem to
want to work, I will have to run /usr/bin/convert, and I feel uneasy
putting user inputted text in a shell, but this regExp should do the job
of sanitizing it. Again, thank you very much for helping a
misunderstanding novice like me.

···

--
Posted via http://www.ruby-forum.com/\.

And are you OK

with '�' as well as '-'? -Tim

Good point, well actually this will go in a url, for example if I enter
mypage, I can access my member page at mydomain.com/mypage. Allowing
question marks would be confusing, because as you know, questionmarks
have special status in URLs for passing data.

···

--
Posted via http://www.ruby-forum.com/\.

Hi --

···

On Sat, 2 Sep 2006, Eric Hodel wrote:

On Sep 1, 2006, at 6:57 PM, Ben V. wrote:

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However,
when I type in 'hello' in the field, it says that it doesn't match the
regexp, yet I'm sure that reg exp works for letters, numbers, and
underscores only. What am I doing wrong? Thanks for your help and time.

That regexp doesn't match lowercase characters.

input =~ /\A[\w-]+\Z/ is probably better.

\Z will allow a final newline character, though, so you'd probably
want to use \z.

David

--
                   David A. Black | dblack@wobblini.net
Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3]
DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4]
[1] Ruby for Rails | [3] http://www.rubypowerandlight.com
[2] http://dablog.rubypal.com | [4] http://www.rubycentral.org

Hi -

···

On Sun, 3 Sep 2006, Gareth Adams wrote:

Ben V. <comprug <at> gmail.com> writes:

I am trying to validate user input so it contains only letters, numbers,
underscores and dashes. I am using this regexp:/[A-Z0-9_-]/. However,
when I type in 'hello' in the field, it says that it doesn't match the
regexp, yet I'm sure that reg exp works for letters, numbers, and
underscores only. What am I doing wrong? Thanks for your help and time.

No one else seems to have mentioned that that regex will match all strings
/conatining/ a letter, digit hyphen or underscore:

irb(main):001:0> /[A-Z0-9_-]/ =~ "£$%^"
=> nil
irb(main):002:0> /[A-Z0-9_-]/ =~ "£$0%^"
=> 2

You probably want something like

/^[\w-]+$/

Eric Hodel already suggested using \A and \Z, and I just suggested \A
and \z. The problem with ^ and $ is that they match the beginnings
and endings of lines, but not the whole string.

David

--
                   David A. Black | dblack@wobblini.net
Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3]
DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4]
[1] Ruby for Rails | [3] http://www.rubypowerandlight.com
[2] http://dablog.rubypal.com | [4] http://www.rubycentral.org

That actually only shows up as a "question mark" because either your browser or ruby-forum.com wasn't all that bright. It was actually an emdash. Anyway since this is for urls, you are ok as far as domain names go, because they only allow alphanumeric characters and hyphens. As far as stuff after the slash goes though, that could be open game, I'm not sure what the rules are.

···

On Sep 2, 2006, at 7:37 AM, Ben V. wrote:

And are you OK

with '�' as well as '-'? -Tim

Good point, well actually this will go in a url, for example if I enter
mypage, I can access my member page at mydomain.com/mypage. Allowing
question marks would be confusing, because as you know, questionmarks
have special status in URLs for passing data.

--
Posted via http://www.ruby-forum.com/\.