2014-03-02 43 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)來完成所有操作,但這僅用於演示目的,因此更詳細。

相關問題