我在轨道上的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的最简单方法是什么?
答案 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