簡體   English   中英

我正在嘗試使用javascript驗證電話號碼

[英]I'm trying to form validate a phone number with a javascript

我正在嘗試驗證電話號碼。 不過,這似乎不起作用。 為什么不起作用?

<html>
<head>
<script>
    function validateForm() {
        var phone1 = document.forms["myForm"]["phone"].value;
        var phone2 = ^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$;

        if ( phone1.value.match(phone2) ){
            return true;
        }else{
            alert("Please enter a valid phone number");
            return false;
        }   
    }
</script>
</head>
<body>

<form name="myForm"
onsubmit="return validateForm()" method="post">

    <label for="phone">Phone:</label><input name="phone" id="phone" value=""    placeholder="Zip..." type="text" onsubmit="return validateForm()"/>

<button type="submit">Submit</button>

</form>

</body>
</html>

它肯定與if語句中的值比較有關,我只是想不出如何准確地做到這一點。

var phone2 = ^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$;

JavaScript中的正則表達式語法錯誤,應該是

var phone2 = /^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/;

而且,您兩次獲得字段的值:

var phone1 = document.forms["myForm"]["phone"].value;
//                                             ^
...
if (phone1.value.match(phone2)) {
//         ^ `value` property here is not defined

請參閱帶有固定代碼的jsfiddle

您的模式RegExp基於您的模式驗證電話號碼,是按照您應驗證的方式進行的。

觀看實況

JS

function validateForm() {
    var re = /^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/; 
    var phone1 = document.forms["myForm"]["phone"].value;
    var m = re.exec(phone1);
    if (m && m[0]){
        return true; 
    }else{
        alert("Please enter a valid phone number");
        return false;
    }
 }

的HTML

<form name="myForm" onsubmit="return validateForm()" method="post">
    <label for="phone">Phone:</label>
    <input name="phone" id="phone" value="" placeholder="Zip..." type="text" onsubmit="return validateForm()" />
    <button type="submit">Submit</button>
</form>

使用時應使用RegExp模式

^((\+?)(1?(\-?)?))(\d{3})(-|\s)?\d{3}(-|\s)?\d{4}$

在此處輸入圖片說明

用戶傾向於按自己喜歡的方式在文本框中輸入詳細信息。 如果表單阻止他們以特定方式在文本框中輸入詳細信息,這將是一個令人討厭的體驗。 最好將您的正則表達式概括為此類模式。 @sainaen已經指出了錯誤,但在以下情況下,您的正則表達式仍會失敗。

  +1-234-123-1234
  +1234-123-1234
  +1234123-1234
  +12341231234
  2341231234 
  434-123-1234   //with a space in the end or beginning 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM