形式验证自学

时间:2011-10-06 02:16:44

标签: javascript

请帮忙。我不是要你创建这个程序,请告诉我我缺少的东西。这是为了自学。我正在尝试制作一个可以执行此操作的JavaScript程序:     1.如果没有创建姓名或电子邮件,请提醒用户     2.电子邮件数据必须包含@符号和至少一个点(。)。此外,@不能是电子邮件地址的第一个字符,最后一个点必须出现在@符号后面,最后2个字符必须出现在结尾之前。  我的代码:

 <html>
 <head>
 <script type="text/javascript">

 function validateForm1()
 {
 var y=document.forms["myForm"]["email"].value;
 var atpos=y.indexOf("@");
 var dotpos=y.lastIndexOf(".");
 var x=document.forms["myForm"]["fname"].value;
 if (x==null || x=="" ||  y=="")
 {
 alert("First name and Email must be filled out");
 return false;
 }
 else if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)

 {
 alert("Not a valid e-mail address");
 return false;
}
}

 </script>
 </head>

 <body>

<form name="myForm" action=# onsubmit="return validateForm1()" method="post">
 First name: <input type="text" name="fname"><br/>
Email: <input type="text" name="email"><br/>
<input type="submit" value="Submit">
</form>



</body>

</html>

4 个答案:

答案 0 :(得分:0)

要检查字段是否为空,您只需使用:

if (strValue) {
    // string not empty
} else {
    // string empty
}

如果您需要专门检查空字符串是否超过null,我认为使用""运算符检查===是最好的选择(这样您就知道它实际上是,你正在比较的字符串。)

为验证电子邮件地址,我建议使用正则表达式。

以下是一个例子:

function validateEmail(elementValue){
   var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
   return emailPattern.test(elementValue);
}

答案 1 :(得分:0)

不要提出自己的电子邮件规则,而是考虑所有电子邮件都遵循常规格式,使其成为正则表达式的理想选择。

这是我在谷歌发现的第一个正则表达式(意味着可能会有更好的)。

var email_rx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

这极大地简化了您的代码。不再需要点和点&符号,只需检查电子邮件是否与提供的正则表达式匹配:

function validateForm1() {
  var email = document.forms["myForm"]["email"].value;
  var fname = document.forms["myForm"]["fname"].value;

  // also note that in javascript, empty strings and nulls are both "falsey",
  // so this conditional works.
  if (!fname || !email) {
    alert("First name and Email must be filled out");
    return false;

  // if they both exist, test your email versus the regex.
  } else if (!email_rx.test(email)) {
    alert("Not a valid e-mail address");
    return false;
  }
}

答案 2 :(得分:0)

在你的其他条件中,它应该是dotpos + 2 >= y.length而不是dotpos + 2 >=x.length

答案 3 :(得分:0)

在您的代码中:

> function validateForm1()    > {    >   var y=document.forms["myForm"]["email"].value;

您应该注意长属性访问链,如果缺少某个部分,您只会收到错误并且脚本将停止运行。此外,为变量使用合理的名称,它使生活更容易。考虑类似的事情:

  var form = document.forms['myForm'];
  var emailInput = form && form.elements['email'];
  var email = emailInput && emailInput.value;

现在,如果由于某种原因导致表单或电子邮件输入丢失,您可以更好地处理错误,而不仅仅是崩溃脚本。

>   var atpos=y.indexOf("@");    >   var dotpos=y.lastIndexOf(".");

您对电子邮件地址的要求(非常小,可能没什么用,但这是您的选择)可以通过正则表达式来满足:

  var emailRe = /.+@.*\...+$/;

>   var x=document.forms["myForm"]["fname"].value;
>   if (x==null || x=="" ||  y=="")

如果您初始化 x (我称之为名称),与 y (我重命名为电子邮件),然后 x 将是未定义的或字符串。据推测,您希望名称不为空,而不是只有空格,所以:

  var nameRe = /^\s*$/;  // match string of just zero or more whitespace characters
  if (name && nameRe.test) {

>   {
>     alert("First name and Email must be filled out");
>     return false;
>   }
>   else if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)

那可以是:

  else if (!emailRe.test(email)) {

>   {
>     alert("Not a valid e-mail address");
>     return false;
>    }
>  }