我有javascript用于电子邮件验证:
//function to check emails
function echeck(str) {
var at="@"
var dot="."
var lat=str.indexOf(at)
var lstr=str.length
var ldot=str.indexOf(dot)
if (str.indexOf(at)==-1){
return false;
}
if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
return false;
}
if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
return false; }
if (str.indexOf(at,(lat+1))!=-1){
return false; }
if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
return false; }
if (str.indexOf(dot,(lat+2))==-1){
return false; }
if (str.indexOf(" ")!=-1){
return false;
}
return true;
}
它工作正常,但没有检查这个 - > !!!!!!!!! @ ####。com
请帮我检查电子邮件中的额外字符。
此致
答案 0 :(得分:2)
您提供的示例不是有效的电子邮件地址,至少因为####。com不是有效的域名。你真正应该做的是使用正则表达式检查电子邮件地址。
正则表达式的最简单版本是
/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/
并且更完整的将是
/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum|xxx)$/
和官方的RFC2822实施将是
/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/
您实际上会检查电子邮件地址,如下所示:
function echeck(str)
{
//using the most simple version
//substitute for another pattern if more complete matching is required
var expr = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
return expr.test(str);
}
请注意,在JS中进行验证并不是一个好主意。您应该始终在服务器中执行另一个验证 - 以防止有人将错误数据传递到您的脚本中并且您乐意使用它。请注意,您无法保证将从您的信息页提交表单。