为什么不使用搜索方法来查找。

Why doesn't using the search method to find a . work the way I expect in JavaScript?

在我的JS代码中,我正在尝试验证电子邮件地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var validateEmail = function () {
    var email = $("email").value;
    var symbol = email.search("@");
    var domain = email.substring(email.indexOf('@')).substr(1);
    var validDomain = domain.search(".");

    if (symbol == -1) {
        alert(email +" is not a valid email address.");
    } else if (validDomain == -1) {
        alert(email +"is not a valid domain name.");
    } else {
        alert(email +" is a valid email address.");
    }

};

我确信有更好的方法来验证电子邮件地址,但我的方法是使用JS属性和方法进行实践。学习简单的基本知识。甚至不确定这个例子是否是最佳实践。

问题是:

1
var validDomain = domain.search(".");

不是从字符串中提取句点。有人能指出我这里的问题吗?

这是jfiddle:http://jsfiddle.net/udv7q/


主要问题是search希望传递正则表达式。如果参数不是一个,则会隐式转换为一个。.是正则表达式中的一个特殊字符,因此需要对其进行转义(也可以使用regex文本)。

1
var validDomain = domain.search(/\./);

演示:http://jsfiddle.net/h4hx5/

注意,这个简单的验证并不能确保输入是有效的电子邮件。有一个规范定义了什么是有效的电子邮件,它比这要复杂得多。但如果它对你有用,那就太好了;通常很难完全验证电子邮件:)

参考文献:

  • https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/string/search