/ / RegExp A z не работи, но това, което Rails 4 изисква - javascript, ruby-on-rails, regex, ruby-on-rails-4, parsley.js

RegExp A z doesnt работи, но това е, което Rails 4 изисква - javascript, руби-на релси, regex, руби-на-релси-4, parsley.js

Наскоро преминах към Rails 4 и сигурносттаизискванията вече не позволяват използването на регулярни изрази в стила на /^..$/. Грешката гласи, че вместо това регулярните изрази трябва да бъдат написани в стил /A..z/. Извършването на тази промяна изглежда решава всички мои проблеми с валидирането от страна на сървъра, но за съжаление наруши и всички мои проверки от страна на клиента в javascript.

Един прост пример. Искам да проверя потребителско име, което да бъде букви, цифри или точки.

Старият регулярен израз изглеждаше като /^[0-9a-zA-Z.]+$/ и работеше както от страна на сървъра (Rails 3.x), така и от страна на клиента

new RegExp( /^[0-9a-zA-Z.]+$/ ).test("myuser.name") = true

Новият регулярен израз изглежда като /A[0-9a-zA-Z.]+z/ и работи от страна на сървъра, но се проваля от страна на клиента

new RegExp( /A[0-9a-zA-Z.]+z/ ).test("myser.name") = false

Така че очевидно правя нещо нередно, но изглежда не мога да намеря обяснения. Проверих дали A..z са валидни регулярни изрази, за да се уверя, че това не е някакъв хак, специфичен за Rails, и изглежда е легитимен.

Някакви идеи?

Отговори:

5 за отговор № 1

JavaScript не поддържа A или z в него RegExp.

Ето някои сурови данни, първо за JavaScript:

var a = "hellonworld"
(/^world/).test(a) // false
(/^world/m).test(a) // true
(/hello$/).test(a) // false
(/hello$/m).test(a) // true

След това, за рубин:

a = "hellonworld"
a.match(/^world/) # => #<MatchData "world">
a.match(/Aworld/) # => nil
a.match(/hello$/) # => #<MatchData "hello">
a.match(/helloz/) # => nil

От това виждаме онзи рубинен "s A и z са еквивалентни на JavaScript ^ и $ стига да не използвате многоредова линия m модификатор. Ако сте загрижени за входа, съдържащ няколко реда, просто ще трябва да преведете вашите регулярни изрази между тези два езика по отношение на тези съвпадащи символи.