2014-03-02 36 views
0

我被困在我的表单的一小部分 - 我想使它只是街道地址字段的第一个字符是数字,其余的可以是任何东西。我已经使用indexOf和reg ex来摆弄。我接近,但并不完全。Javascript表单验证 - 只有第一个字符必须是数字

任何建议,将不胜感激!

window.onload=function() 
{ 
    document.forms[0].onsubmit=function() 
    { 

     for(i = 0; i < this.elements.length; i++) 
     { 
      //alert required field 
      if(this.elements[i].className.indexOf("required") != -1) 
      { 
       if(this.elements[i].value == "") 
       { 
        alert("required field"); 
        this.elements[i].focus(); 
        return false; 
       } 

      } 


      //username requirements 
      var userLength = document.getElementById("user") 

      if((userLength.value.length < 5) || (userLength.value.length > 10)) 
      { 
      alert("username must be between 5-10 characters"); 
      return false; 
      } 


      //email address requirements 
      var emailMust = document.getElementById("email") 

      if((emailMust.value.indexOf("@") == -1) || (emailMust.value.indexOf(".") == -1)) 
      { 
        alert("email must contain proper characters"); 
        return false; 
      } 


      //address requirements 
      var address = document.getElementById("address") 
      var regex = new RegExp('/^[0-9]{1}[a-zA-Z0-9]$/'); 

      if(address.match(regex)) 
      { 
       alert("address must begin with a number"); 
       return false; 
      } 



      //birth year requirements 
      var birthYear = document.getElementById("birth") 

      if(isNaN(birthYear.value)) 
      { 
       alert("birth year must be a number"); 
       return false; 
      } 


     } 

    } 
} 

here`s我的HTML部分:

<form action="#"> 

<p><label for="user">Username:</label>*</p> 
<p><input type="text" class="required" id="user"></p> 

<p><label for="email">Email Address:</label>*</p> 
<p><input type="text" class="required" id="email"></p> 

<p><label for="address">Street Address:</label></p> 
<p><input type="text" id="address"></p> 

<p><label for="birth">Year of birth:</label>*</p> 
<p><input type="text" class="required" id="birth"></p> 

<br> 
<input type="submit"> 
<p><i>* required field</i></p> 

回答

1

您还可以使用:

var regex = new RegExp('/^[0-9]{1,}[a-zA-Z0-9]*$/'); 

下面是如何{}工作原理:

a{3} Exactly 3 of a 
a{3,} 3 or more of a 
a{3,6} Between 3 and 6 of a 

我也想指出的是您的图案不占数量后前来空间。例如,它不会匹配123 Rod Street。我还包括在您所设定的

例如(字母A前右)空间:

new RegExp('/^[0-9]{1,}[ a-zA-Z0-9]*$/'); 

更新::

我会离开断斜线,因为你既然”重新传递它作为一个字符串,它会自动逃脱!

new RegExp('^[0-9]{1,}[ a-zA-Z0-9]*$'); 
+0

谢谢!这是一个很好的修改,但是我发现第51行有一个address.match错误不是函数? – amapeli

+0

是地址字符串吗? – linstantnoodles

+0

另请参阅我的更新。你不应该需要正斜杠。 – linstantnoodles

4

更改以下行

var regex = new RegExp('/^[0-9]{1}[a-zA-Z0-9]$/'); 

var regex = new RegExp('^[0-9]'); 

由于您的要求是只是第一个字符的t他的街道地址字段是数字,其余的可以是任何东西,你的正则表达式应该只关注第一个字符。如果你必须指定另一个字符类,它不应该像[a-zA-Z0-9]那样窄。请记住,有效地址可能包含逗号,连字符,空格等字符。

+0

“+”代表什么?无论如何,第二个表达式与数字匹配 – clentfort

+0

@clentfort谢谢你指出。我相应地修改了我的答案。 –

+0

这是第一个字符验证的更好和干净的解决方案。 – Sanjeev

1

您可以尝试将第一个字符转换为它的序数值并将其与ASCII数字文字的范围进行比较。

var addressValid = address.value.charCodeAt(0); 
addressValid = (addressValid >= 48 && addressValid <= 57) 

如果第一字符是一个数字(0-9)的值addressValid将为真。所有简单和没有正则表达式。

当然,您可以通过在if中直接访问address.value.charCodeAt(0)来完成所有操作,但这仅用于演示目的,因此更详细。

相关问题