#javascript #ruby-on-rails #ruby #regex
#javascript #ruby-on-rails #ruby #регулярное выражение
Вопрос:
У меня есть такое регулярное выражение в ruby on rails
/A([^@s] )@((?:[-a-z0-9] .) [a-z]{2,})Z/i
Я бы хотел использовать ту же логику проверки электронной почты во внешнем интерфейсе.
Я пытался использовать .inspect
метод в irb
консоли, похоже, он не возвращает допустимое регулярное выражение js.
Насколько я понимаю A
, это a ^
, Z
это a $
. [-a-z0-9]
вероятно, переводится [a-zA-Z0-9]
как . Не уверен насчет остального.
Я тоже пытался найти онлайн-конвертер, но не смог его найти. Ответы в других подобных темах в SO не сработали.
Какой самый простой способ перевести такое регулярное выражение из ruby в javascript?
Комментарии:
1. Вы пытались использовать его как есть в javascript? Каков результат>?
2. Он должен переводиться примерно от 1 до 1, похоже, вы уже указали на некоторые преобразования, за исключением того, что
[-a-z0-9]
они должны оставаться неизменными. Оно соответствует любой строчной букве, цифре или тире (-). Тире не имеет особого значения в начале символьного класса.
Ответ №1:
Как указано Даниэлем в комментарии, оно должно просто переводиться один к одному, я неправильно предположил, что [-a-z0-9]
его следует заменить.
Версия Ruby:
/A([^@s] )@((?:[-a-z0-9] .) [a-z]{2,})Z/i
Версия JavaScript:
/^([^@s] )@((?:[-a-z0-9] .) [a-z]{2,})$/
Некоторые тесты:
/^([^@s] )@((?:[-a-z0-9] .) [a-z]{2,})$/i.test("test@email.com"); // true
/^([^@s] )@((?:[-a-z0-9] .) [a-z]{2,})$/i.test("test@emailcom"); // false
/^([^@s] )@((?:[-a-z0-9] .) [a-z]{2,})$/i.test("testemail.com"); // false
Ответ №2:
Вы пробовали это?
class Regexp
def to_javascript
Regexp.new(inspect.sub('\A','^').sub('\Z','$').sub('\z','$').sub(/^//,'').sub(//[a-z]*$/,'').gsub(/(?#. )/, '').gsub(/(?-w :/,'('), self.options).inspect
end
end
Когда вы предоставляете его клиенту, просто создайте экземпляр нового RegExp
объекта с результирующей строкой:
new RegExp(regexpStringFromRuby);
Проверьте драгоценный камень client_side_validations. Это может быть то, что вам нужно.
Комментарии:
1. Я не понимаю, должен ли я создать
Regexp
класс с методом, определенным выше? Еще одна вещь, которую я не понимаю, почему разные имена классовRexexp
противRegExp
?