编写电子邮件验证功能

时间:2015-08-10 14:19:18

标签: javascript validation

编写一个名为validate的函数,它接受一个sting参数。当且仅当字符串包含至少一个点.和正好一个@符号时,该函数应返回true。 例如。

validate ("j.nicholson@southampton.ac.uk")===true

2 个答案:

答案 0 :(得分:0)

如果你真的需要答案,那就是......

    public static boolean create(Client player) {
        Channel channel = new Channel(player);
        channels.get(channel).get(player).bla();
        return true;
    }

答案 1 :(得分:0)

即使这是家庭作业,我也会帮助你。

有几种方法可以解决这个问题。大多数情况下,当您尝试验证某些输入时,使用Regular Expressions。但是,我还可以考虑另外两种方法:使用String's indexOf function,或手动循环组成字符串的字符数组。

让我们看一下indexOf函数,它应该非常简单。

在Javascript中,检查字符串时没有contains函数。这有点烦人,但您可以使用indexOf函数创建自己的函数。

因此,从MDN,str.indexOf(searchValue[, fromIndex])函数returns the index within the calling String object of the first occurrence of the specified value, starting the search at fromIndex. Returns -1 if the value is not found.

好的,所以如果indexOf返回非负值,我们的字符串就会包含我们要搜索的字符串!

所以,让我们写一个包含函数。

function contains(original_string, string_to_search_for) {
    // if `location_of_search_string` is 0 or greater, we have a match.
    var location_of_search_string = original_string.indexOf(string_to_search_for);
    if (location_of_search_string >= 0) {
        return true;
    } else {
        return false;
    }
}

到目前为止我?现在我们可以将代码清理一下,因此它不是那么多行。我们实际上可以让它成为一条线。请注意我们的if语句是true,我们还想返回true?我们可以通过返回if语句求值的内容来利用这一点。我们也不需要将结果存储在变量中。

好的,现在我们有了

function contains(original_string, string_to_search_for) {
    return (original_string.indexOf(string_to_search_for) >= 0);
}

好的,为了查看我们的字符串中是否有.,我们可以运行:

var email = 'hello@example.com';
contains(email, '.'); //returns true

现在,如果我们针对&符号(@)执行此操作,如果至少一个&符号,则返回true,但我们只想 一个。所以,我们需要另一个功能。

有几种方法可以做到这一点,但让我们坚持indexOf。还记得我们可以传递的fromIndex参数indexOf吗?让我们用它。在我们第一次发现@之后,让我们开始在该位置之后寻找另一个&符号&em>。如果我们找不到,那么我们只有一个@

function containsJustOne(original_string, string_to_search_for) {
    var first_location = original_string.indexOf(string_to_search_for);
    if (first_location >= 0) {
        // move 1 spot after our first found index
        var second_location = original_string.indexOf(string_to_search_for, first_location + 1);
        // We want to return true if we DIDN'T find a second location,
        // aka, if it is equal to -1.
        return (second_location === -1);
    } else {
        // We didn't find any, return false right away.
        return false;
    }
}

OK!所以,我们可以使函数号为validateEmail(email),如下所示:

function validateEmail(email) {
    return (containsJustOne('@') && contains('.'));
}

只是为了好玩,如果你想用正则表达式解决这个问题,我可能会这样做:

function validateEmailWithRegExp(email) {
    return /^[^@]*@[^@]*$/.test(email) && /^(?:.*\.)+.*$/.test(email);
}

单行很有趣!这几乎不是您可以使用的最优化的reg exp,但它可以根据您的帖子完成工作。