将Ruby正则表达式转换为JavaScript

时间:2014-06-22 10:16:43

标签: javascript ruby-on-rails ruby regex

我在轨道上的ruby中有这样的正则表达式

/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i

我想在前端使用相同的电子邮件验证逻辑。

我尝试在.inspect控制台中使用irb方法,它似乎没有返回js有效的正则表达式。

据我所知,\A^\Z$[-a-z0-9]可能转换为[a-zA-Z0-9]。其他人不确定。

我也试图寻找一个在线转换器,找不到一个。 SO中其他类似主题的答案无效。

将这样的正则表达式从ruby转换为javascript的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

您是否尝试过this

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 gem。这可能就是你所需要的。

答案 1 :(得分: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