我试图找出首先检查字符串是否是有效电子邮件地址的javascript正则表达式验证程序,然后检查@
符号之前是否有10个且只有10个数字。我想出了这个:
/[0-9]\@+@\S+\.\S+/
......但那不对。我一直在关注this stack post,但无法弄清楚如何将@
之前的数字检查与电子邮件验证工具结合起来。
最终我需要一个函数,如果字符串匹配我的模式,则返回true,否则返回false。提前谢谢。
示例字符串:8015551234@foobar.com
答案 0 :(得分:2)
var r = /^\d{10}@\S+\.\S+$/,
a = [
'801555123@foobar.com', // Too short
'80155512341@foobar.com', // Too long
'notNumbers@foobar.com',
'8015551234@foobar.com' // Just right
]
a.forEach(function(s) {
console.log(r.test(s))
})
^
在行首处断言位置\d{10}
完全匹配10位数字@
按字面意思匹配\S+
匹配一个或多个非空白字符\.
按字面匹配\S+
匹配一个或多个非空白字符$
断言行尾的位置答案 1 :(得分:0)
使用以下RegEx:
/(?<=(\s|^))[0-9]{10}\@+[a-zA-Z0-9_.-]+/
如果在数字序列之前不需要空格(即,如果这些数字不需要构成整个本地名称[@
]之前的部分),则删除lookbehind部分((?<=\s*)
)
<强>解释强>
@
。备注强>
'语法良好'应理解为绝对低级别:域名受各种未经验证的约束(例如,以顶级域名结尾)。 Regexen将是错误的工具。
对域名部分的检查不符合国际化域名。看看this SO answer以获得一个想法。
代码嵌入
将正则表达式转换为测试代码,如下所示:
[
'123456789@example.com '
, '12345678901@example.com '
, 'a1234567890@example.com '
, 'whatever@example.com '
, '1234567890@example.com '
, '1234567890@gargamel.smurf.com '
, ' 1234567890@a.strange.domain.name.but.hey.if.it.gets.resolved....org'
].map ( function ( sample ) {
return /(?<=(\s|^))[0-9]{10}\@+[a-zA-Z0-9_.-]+/.test(sample);
});