好的,所以我对一般的regexp有点新意,更不用说Javascript了。
我正在尝试处理表单验证项目,我找到了一个网站,其中列出了各种有用的样本regexp here,其中包含一些用于电子邮件验证的内容,这正是我目前正在尝试的内容。
无论如何,按照这个示例进行w3schools的表单验证,我能够使用他们的示例使其正常工作,并且regexp在javascript函数之外工作,但出于某种原因,当我在函数内部调用它时,它返回一个undefined值。
这是我的代码:
<html>
<head>
<title>formzz validate-jons</title>
<script type="text/javascript">
pattern = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
function valid8email(field, txt)
{
with(field)
{
//at_pos = value.indexOf('@');
//dot_pos = value.lastIndexOf('.');
if(!pattern.test(value)) //at_pos < 1 || (dot_pos - at_pos) < 2)
{
alert(txt);
return false;
}
else
{
return true;
}
}
}
function valid8(form)
{
with(form)
{
if(valid8email(email, "you must enter an email address") == false)
{
email.focus();
return false;
}
}
}
</script>
</head>
<body>
<form action="#" method="POST" onsubmit="return valid8(this)">
Email: <input type="text" name="email" size="30" />
<input type="submit" value="clicky-click" />
</form>
<script type="text/javascript">
alert(pattern.test(""));
</script>
</body>
</html>
好的......所以身体内部脚本标签中的提醒工作正常。
我在javascript函数本身内做了很多测试并检查了各种各样的东西:
那么问题是什么呢?我很困惑。
答案 0 :(得分:8)
问题在于pattern
是指field.pattern
(an HTML5 attribute),因为你在with()
内使用它,而这是一个字符串,而不是你的正则表达式。如果您将其称为其他内容,例如pattern1
,it would work fine。
话虽如此,首先不要使用with
,否则你不会遇到这些问题:)
非with
版本如下所示:
var pattern = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
function valid8email(field, txt) {
if (!pattern.test(field.value))
{
alert(txt);
return false;
}
else {
return true;
}
}
function valid8(form) {
if (valid8email(form.email, "you must enter an email address") == false) {
form.email.focus();
return false;
}
}