即使这是家庭作业,我也会帮助你。
有几种方法可以解决这个问题。大多数时候,当您尝试验证某些输入时,您使用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。还记得我们可以传递indexOf 的fromIndex 参数吗?让我们使用它。在我们找到@ 的第一次出现后,让我们开始在该位置 寻找另一个& 符号。如果我们没有找到,那么我们只有一个@。
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;
}
}
好的!因此,我们可以创建一个函数 no,validateEmail(email),如下所示:
function validateEmail(email) {
return (containsJustOne('@') && contains('.'));
}
只是为了好玩,如果你想用正则表达式解决这个问题,我可能会做这样的事情:
function validateEmailWithRegExp(email) {
return /^[^@]*@[^@]*$/.test(email) && /^(?:.*\.)+.*$/.test(email);
}
单线很有趣!这几乎不是您可以使用的最优化的 reg exp,但它可以根据您的帖子完成工作。