2010-03-05 152 views
11

我需要驗證JavaScript中的電話號碼。 的要求是:Javascript電話號碼驗證

他們應該是10位數字,沒有逗號,沒有 破折號,只是數字,而不是前面的 1+

這是我寫到目前爲止

function validatePhone(field,alerttxt) { 
    with (field) { 
     if(value.length > 10) { 
      alert(alerttext); 
      return false; 
     } 
     for(i = 0; i < value.length; i++) { 
      if(parseInt(value[i]) == NaN) { 
       alert(alerttxt); 
       return false; 
      } 
     } 
     return true; 
    } 
} 
function validateForm(thisform) { 
     if (validatePhone(phone,"Invalid phone number")==false) { 
      phone.focus(); 
      return false; 
     } 

    } 
} 
    <form action="post.php" method="post" id="contactform" onsubmit="return validateForm(this)"> 
    <ol> 
     <label for="phone">Your phone <span class="red"></span></label> 
     <input id="phone" name="phone" class="text" /> 
     </li> 
    </ol> 
    </form> 

但是,顯然它不起作用。 如何編寫validatePhone()函數以使其正常工作?

+6

什麼是不友好的系統。讓人們輸入空格和破折號,然後忽略它們。國際電話號碼呢? – Quentin 2010-03-05 10:43:37

+0

這看起來像一個學校作業。對於嚴重使用,您*不應使用正則表達式來[正確驗證電話號碼](http://stackoverflow.com/a/4338544/1269037)。 – 2014-02-26 07:52:12

+0

@DanDascalescu其實在那個時候,這不是一個學派。 RentACoder – 2014-02-26 10:38:18

回答

29
phone = phone.replace(/[^0-9]/g, ''); 
if(phone.length != 10) { 
    alert("not 10 digits"); 
} else { 
    alert("yep, its 10 digits"); 
} 

這將驗證和/或根據您的要求更正,刪除所有非數字。

+1

爲什麼不只是使用match?正如我所說的「驗證和/或更正」, – Marius 2010-03-05 10:47:19

+5

就是爲什麼不能匹配。當用戶很容易刪除時,強迫某人輸入電話號碼的用戶體驗很差,無法使用空格或破折號。 – Erik 2010-03-05 10:53:05

+0

謝謝,我真的很喜歡'糾正'正則表達式:-) – 2010-03-05 11:47:37

0

固定功能:

function validateForm(thisform) { 
     if (validatePhone(thisform.phone,"Invalid phone number")==false) { 
      thisform.phone.focus(); 
      return false; 
     } 
     return true; 
} 
+0

只是一個低級的工作我忘了在函數的開頭加入(thisform),但實際上我寫了它) – 2010-03-05 13:30:03

+1

但是你也有額外的「}」符號 – antyrat 2010-03-05 14:23:29

7

你可以使用正則表達式:

function validatePhone(field, alerttext) { 
    if (field.match(/^\d{10}/)) { 
     return true; 
    } 
    alert(alerttext); 
    return false; 
} 
+0

你*不應該*,實際上,使用正則表達式來[正確驗證電話號碼](http://stackoverflow.com/a/4338544/1269037)。 – 2014-02-26 07:50:17

+0

他的要求說,他應該檢查一個10位數字格式沒有別的。所以這個正則表達式檢查應該沒問題。您是對的:我不喜歡將我強制轉換爲特定電話號碼格式的應用程序。檢查最小長度,數字和任何順序的一些() - + /字符都可以,例如:'^ [0-9()+/-] {5,} $' – arnep 2014-02-27 07:59:13

1

守則惟獨數字括號和破折號

function DoValidatePhone() { 
    var frm = document.forms['editMemberForm'];     
    var stripped = frm.contact.value; 
    var isGoodMatch = stripped.match(/^[0-9\s(-)]*$/); 
    if (!isGoodMatch) { 
     alert("The Emergency Contact number contains invalid characters." + stripped); 
     return false; 
    } 
} 
10

谷歌的libphonenumber是驗證和電話號碼的格式在世界各地非常有幫助。它比使用RegEx更容易,更隱蔽,更健壯,它有JavaScript,Ruby,Python,C#,PHP和Objective-C風味。

+1

* This *。人們似乎並不瞭解[正則表達式是天真的解決方案](http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links/21925491#21925491)驗證真實世界的數據。 – 2014-02-26 07:44:43

-1
function validate(phoneString){ 

    reg = /^([+|\d])+([\s|\d])+([\d])$/; 

    return reg.test(phoneString); 

}