So, :some_digits_collection must match only digits. But when I puts
“123f”(for example) in my form, it matches too and there no errors!
Why?
That’s really curious. I tested your regexp at Rubular, and it really
does match and work the way you want it to. What gets stored in the
database after this passes? Perhaps the input value is being cast to
an integer for storage, and so the trailing letters are being stripped
out. IF the validation happens after the cast, that could explain it
– but only if the value that ends up being stored is actually free of
letters.
It matches because it’s true. The expressions states any number of
digits before the end of line. It does not state exclusively digits.
That wasn’t what I got from it on Rubular. The ^ and $ surrounding the
\d* mean the entire line is considered, and if you type in the precise
regexp on rubular.com, and then type in 123f in the test string box,
you’ll see that it matches 1,12,123, and then reports “no match” the
moment you type the f.
So, :some_digits_collection must match only digits. But when I puts
“123f”(for example) in my form, it matches too and there no errors! Why?
Is this column an integer column? If so, then I seem to recall that at
the point that validations run rails has already converted the
argument to an integer, i.e. it will have converted your 123f to 123
and so your validation passes.
Is this column an integer column? If so, then I seem to recall that at
the point that validations run rails has already converted the
argument to an integer, i.e. it will have converted your 123f to 123
and so your validation passes.
Fred, how I can fix it? For example, if user will put in field “12f3”
all valid.