A simple example. I want to validate a username to be letters, number, or periods.
The old regex looked like /^[0-9a-zA-Z.]+$/ and worked both server side (Rails 3.x) and client side
new RegExp( /^[0-9a-zA-Z.]+$/ ).test('myuser.name') = true
The new regex looks like /\A[0-9a-zA-Z.]+\z/ and works server side but fails client side
new RegExp( /\A[0-9a-zA-Z.]+\z/ ).test('myser.name') = false
So I’m clearly doing something wrong, but I can’t seem to find any explanations. I checked that \A..\z are valid regex to make sure that its not some Rails-specific hack and it seems to be legit.
\z in its
var a = "hello\nworld" (/^world/).test(a) // false (/^world/m).test(a) // true (/hello$/).test(a) // false (/hello$/m).test(a) // true
Next, for ruby:
a = "hello\nworld" a.match(/^world/) # => #<MatchData "world"> a.match(/\Aworld/) # => nil a.match(/hello$/) # => #<MatchData "hello"> a.match(/hello\z/) # => nil
From this, we see that ruby’s
$ as long as you don’t use the multiline
m modifier. If you are concerned about the input having multiple lines, you’re simply going to have to translate your regular expressions between these two languages with respect to these matching characters.
Answered By – Matt