想要验证用户可以输入任何类型的电子邮件的电子邮件字段。当用户从Outlook复制粘贴的电子邮件地址时,使用regex进行验证检查失败。从Outlook复制的电子邮件地址看起来不一样
M, Karan <karan.m@outlook.com>
输入是m.karan@yahoo.com,M, Karan <karan.m@outlook.com>
。如何验证这个输入。
++添加代码片段
我通过将单个电子邮件用逗号分隔符分割到下面的函数,
function validateEmail(email) {
var re = /^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
当从outlook复制的邮件在input元素中可用时,这个逻辑就失效了。
期待帮助
1。解决方案像这样使用正则表达式(但具体来说这个正则表达式不是世界上最好的:)):
^(([a-zA-Z-0-9,.: ])*<){0,1}(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))>{0,1}$
2。解决方案编写JavaScript函数解析电子邮件,然后使用正则表达式。下面是解析函数的示例:
function parseEmail(origin) {
return origin.substring(origin.lastIndexOf('<')+1, origin.lastIndexOf('>'));
}