gpt4 book ai didi

javascript - 外部 .js 中 html 表单的正则表达式验证

转载 作者:行者123 更新时间:2023-11-28 21:03:56 25 4
gpt4 key购买 nike

我正在尝试使用 javascript 函数验证 html 表单,但该函数永远不会将值与正则表达式匹配,即使它们是正确的。这就是我所拥有的:

function validateForms(form){
var usZipRegex = '^\d{5}[[$-.+ ]?\d{4}]?$|^\d{5}$';
var canZipRegex = '^[ABCEGHJKLMNPRSTVWXY][\d][ABCEGHJKLMNPRSTVWXYZ][\W]?[\d][ABCEGHJKLMNPRSTVWXYZ][\d]$';
var nameRegex = '^[A-Za-z][ -a-zA-Z]+$';
var emailRegex = '^[^\.@]([\w]*\.)*[^\.@]*@[a-zA-Z0-9-]{1,63}(\.[a-zA-Z0-9-]{1,63})+$';
var name = form.name.value;
var zip = form.zip.value;
var email = form.email.value;
var comment = form.comment.value
if(name == "") {
alert('You must enter your name.');
return false;
}
if(name != nameRegex) {
alert('You have entered an invalid name.');
return false;
}
if(email == "") {
alert('You must enter your email.');
return false;
}
if(email != emailRegex) {
alert('You have entered an invalid email.');
return false;
}
if(zip == "") {
alert('You must enter your zip code.');
return false;
}
if((zip != usZipRegex) & (zip != canZipRegex)) {
alert('You have entered an invalid zip code.');
return false;
}
if(comment == "") {
alert('You must enter a message.');
return false;
}
return true;
}

(name != nameRegex) 部分始终返回 true,但不应该返回 true。不过 (name == "") 部分确实可以自行工作。

最佳答案

您正在比较原始字符串,而不是运行正则表达式。 name != nameRegex 将始终返回 true,除非该人的名字实际上是 ^[A-Za-z][ -a-zA-Z]+$。您需要将 nameRegex 正确设置为正则表达式对象,但在您的代码中,它只是一个字符串。您还需要使用 test 或 RegExp 对象的另一种方法来检查匹配项,而不是 ==/!= 运算符。对于其他模式也是如此。

构建正则表达式可以通过以下两种方式之一完成:

var regex1 = /[a-z0-9]/;
var regex2 = new RegExp('[a-z0-9]');

如果你这样做,它只是一个字符串:

var notARegex = '[a-z0-9]';

你的代码应该更接近这种风格:

var nameRegex = /^[A-Za-z][-a-zA-Z ]+$/; //note that the hyphen has been moved
//...
if (!nameRegex.test(name)) {
alert('You have entered an invalid name.');
return false;
}
<小时/>

编辑:这里还有更多问题。您的其他正则表达式代码可以使用一些重大改进:

var usZipRegex = /^\d{5}([$.+ -]?\d{4})?$/;
var canZipRegex = /^(?![DFIOQU])[A-Y]\d(?![DFIOQU])[A-Z]\W?\d(?![DFIOQU])[A-Z]\d$/;
var nameRegex = /^[a-z][a-z\s-]+$/i;
var emailRegex = /^[^.@]+@[^.@]{1,63}(\.[^.@]{1,63})+$/i';

我不知道您的加拿大邮政编码模式是否正确,但电子邮件肯定是错误的(电子邮件比您想象的要复杂得多,所以最好非常宽容)。

关于javascript - 外部 .js 中 html 表单的正则表达式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com