【发布时间】:2020-08-26 21:56:46
【问题描述】:
我试图让用户检查他的电子邮件地址是否通过 RFC 标准,并将其与下面的正则表达式进行比较。
我已经使用负责执行验证测试的函数在控制台上检查了几个示例。我知道我的正则表达式还没有准备好,但是每当我在控制台上尝试一些示例时,它都可以工作。
当函数从包含的“文本”HTML 表单中获取值时,问题就开始了。
使用 Javascript,我还检查了浏览器如何解释值(只需将文本粘贴到另一个 div 中)- 结果还可以。
为什么在 HTML 表单上使用输入值时验证不能正常工作?
const regular = /^[a-z/d]+[/d/w.-]*@(?:[a-z/d-]+[a-z/d-]\.+){1,5}[a-z]{1,3}[a-z]$/i;
test = function(email) {
if (regular.test(email) == false) {
alert('Your email adress is not correct. Try again!')
document.getElementById('result').innerHTML = document.getElementById('text').value;
return false;
} else {
alert('Match');
return true;
}
}
<div id='form-structure'>
<form name='form1' action='#'>
<label for='email' name='email'>E-mail</label>
<input type='text' name='text' id='text' placeholder="Enter your email" required>
<button type='submit' name='submit' onclick="test(document.form1.text)"
value='Submit'>Test</button>
</form>
</div>
<div id='result' style='font-size: 15px'>
</div>
【问题讨论】:
-
您可以使用
<input type="email">字段。请注意,您的“常规”正则表达式远不符合 RFC — 请参阅regular-expressions.info/email.html — 它立即失败了something+something@example.com的 my 通用地址格式,因为 plus 而被拒绝,并且name@example.museum失败(博物馆是一个有效的 TLD)Stackoverflow 有几十个(如果不是数百个)尝试正则表达式验证电子邮件地址的问题。 -
Szpotu — 虽然您接受了一个答案,但它的陈述 “您的问题在于
document.form1.text。简单地将其更改为document.forms.form1.text” 不正确。问题是不是您没有包含.forms.form1并且单独使用了.form1。问题是你最后没有使用.value。如果您使用onclick="test(document.form1.text.value)",您的代码会有效
标签: javascript html validation