(Ruby 1.9.2) I have a simple validation regex which I need to pass the
following values: “Billy-Bob” and “O’Kelley” (as test cases). Originally
I
was not allowing apostrophe but it became apparent I had to allow it.
The initial regex was:
/^[a-zA-Z -]*$/
Now, when I added the apostrophe like this:
/^[a-zA-Z’ -’]*$/
Then for some reason “Billy-Bob” was not getting matched:
It is the minus that is a special char (as in a-z) if you escape the
minus it is ok.
ruby-1.9.2-p0 > “Billy-Bob” =~ /^[a-zA-Z -']$/
=> 0
ruby-1.9.2-p0 > “O’Kelley” =~ /^[a-zA-Z -']$/
=> 0
Now, when I added the apostrophe like this:
But when I moved the apostrophe further in, then things work as desired
It is the minus that is a special char (as in a-z) if you escape the
minus it is ok.
Yes I see you are right —the weird part is that the minus is getting
passed not as a special character in the first examples ( “Billy-Bob” =~
/^[a-zA-Z’ -]*$/ returns 0!) … anyhow, I will remember than and start
escaping it.
…
It is the minus that is a special char (as in a-z) if you escape the
minus it is ok.
Yes I see you are right —the weird part is that the minus is getting
passed not as a special character in the first examples ( “Billy-Bob” =~
/^[a-zA-Z’ -]*$/ returns 0!) … anyhow, I will remember than and start
escaping it.
Yes I wondered about that. Either it is a bug or a documented feature
that - does not need to be escaped in some circumstances. Or perhaps
[a-zA-Z -] means something that neither of us understands.
The minus (hyphen) in a charset is un-special if it is at the beginning or
the end. You’re better off escaping it yourself for exactly the reason you
encountered adding another character to the end changed the meaning of the
regular expression (charset) in a way you didn’t expect.
It is the minus that is a special char (as in a-z) if you escape the
minus it is ok.
Yes I see you are right —the weird part is that the minus is
getting passed not as a special character in the first examples
( “Billy-Bob” =~ /^[a-zA-Z’ -]*$/ returns 0!) … anyhow, I will
remember than and start escaping it.
The minus (hyphen) in a charset is un-special if it is at the
beginning or the end. You’re better off escaping it yourself for
exactly the reason you encountered adding another character to the
end changed the meaning of the regular expression (charset) in a way
you didn’t expect.