【发布时间】:2017-03-25 22:25:53
【问题描述】:
我正在编写一个简单的验证脚本,以确保用户输入的内容至少看起来像一个有效的电子邮件地址。这是一个简化版,可以在jsbinhere上测试。
HTML:
<form name="emailForm" action="whatever.php" method="post">
<input name="email" id="email" type="text" onkeyup="checkEmail()" />
<input type="submit" name="submit" id="submit" value="submit" disabled />
</form>
<div id="errorMsg">
A valid email address is required.
</div>
JS
function checkEmail() {
var email = document.getElementById("email").value;
var valid = false;
if (email.length > 5 && email.search("@") > 0 && email.search(".") > 0) {
valid = true;
document.getElementById("errorMsg").innerHTML = "";
}
document.getElementById("submit").disabled = valid == false;
}
我的期望是任何长度超过 5 个字符且包含 @ 和 a 的字符串。不在第一个位置的应该评估为真,但无论在输入中输入什么它都不会。我在这里想念什么?我敢肯定这很愚蠢。
我已通过使用 alert(valid) 进行故障排除,确认该函数被调用并始终返回 valid=false。
【问题讨论】:
-
搜索在做什么?
-
我认为您要查找的方法是
indexOf("@"),而不是搜索 -
.是一个匹配任何字母数字符号或字符的元字符... -
rt*m :) ->
str.search(regexp): "search() 方法执行搜索正则表达式和此 String 对象之间的匹配项。", @ 987654328@:"一个正则表达式对象。如果传入一个非RegExp对象obj,则通过new RegExp(obj)隐式转换为一个RegExp。",返回值:"正则表达式和给定字符串之间的第一个匹配项的索引;如果未找到,则为 -1。" ->"."匹配任何字符,因此email.search(".")将始终返回零。 -
请注意,禁用提交按钮不会停止提交表单。您应该在表单的提交处理程序上设置监听器并在那里取消提交。
标签: javascript