正则表达式不工作

Regular expression not working?

本文关键字:工作 正则表达式      更新时间:2023-09-26

让我们直接进入主题:

JS

function detailCheck() {
  var phNoLength = document.getElementById('phNo').value.length;  //get value for phone number from form for checking
  var cardNoLength = document.getElementById('cardNo').value.length; //get value for card number length for checking 
  var postCodeLength = document.getElementById("postCode").value.length //get value for post code length
  var a = /^[-+]?[0-9]+$/; 
  var b = /^[A-Za-z]+$/; 
//if form is not got all inputs filled 
 for (var i = 0; i < 5; i++) {
   details = document.getElementById("myForm")[i].value;
   if (details === "") {
     var i = ("Please enter ALL your details."); 
     document.getElementById("formTital").innerHTML=i;
    return;
    }
}
//check if names have numbers in them
if(b.test(document.getElementById("fName").value)){                                                                     
 if(b.test(document.getElementById("lName").value)){
 //if names too short
  if(fName < 3) {i = "Please enter a longer first name."; document.getElementById("formTital").innerHTML=i; return;}
   if(lName < 3) {i = "Please enter a longer last name."; document.getElementById("formTital").innerHTML=i; return;}
 //if phone number not number
    if(a.test(document.getElementById("phNo").value)){
 //if phone number too short 	
     if(phNoLength != 7) {var i ="Please use a phone number with 7 digits";document.getElementById("formTital").innerHTML=i; return;}
 //if CC is not a number
      if(a.test(document.getElementById("cardNo").value)){
 //if CC is too short
       if(cardNoLength != 4) {var i ="Please use a card number with 4 digits";document.getElementById("formTital").innerHTML=i; return;}
 //if post code is not a number
        if(a.test(document.getElementById("postCode").value)){
         if(postCodeLength != 4) {var i ="Please use a card number with 4 digits";document.getElementById("formTital").innerHTML=i; return;}
     } else {var i ="Please only use numbers in your post code."; document.getElementById("formTital").innerHTML=i; return;}
    } else {var i ="Please only use numbers in your credit card."; document.getElementById("formTital").innerHTML=i; return;}
   } else {var i ="Please only use numbers in your Phone number."; document.getElementById("formTital").innerHTML=i; return;}
   
  } else {var i = "Please don't use numbers in your last name."; document.getElementById("formTital").innerHTML=i; return;}
  
 } else {var i = "Please don't use numbers in your first name."; document.getElementById("formTital").innerHTML=i; return;}
toggleContent();
}
 <form id="myForm" action="form_action.asp">
    First name: <br> <input class="formInput" type="text" id="fName" name="fName"><br>
    Last name: <br> <input class="formInput" type="text" id="lName" name="lName"><br>
    Phone Number: <br> <input class="formInput" type="number" id="phNo" name="phNo" maxlength="7"><br>
    Credit Card Number: <br> <input class="formInput" type="password" id="cardNo" name="cardNo" maxlength="4"><br>
    Address: <br> <input class="formInput" type="text" id="address" name="address"><br>
    Post code: <br> <input class="formInput" type="number" id="postCode" name="postCode" maxlength="4"><br>
   </form>

我可以传递一个输入到电话号码,如-234567,并让它通过尽管var a = /^[-+]?[0-9]+$/;。例如,如果我加上123456+,什么也没发生

试试下面的代码:

var a = /^[-+]?[0-9]+'+$/;

var a = /^[-+]?[0-9]+'+$/;
console.log("123456+".match(a))

你的问题不清楚你真正想要什么。假设您想要用RegExp匹配美国电话号码,下面将提供表示10位或7位美国电话号码的多种样式:

var phoneNumberRegExp = /^(?:'(?([2-9]'d{2})[)-]? ?)?([2-9]'d{2})-?('d{4})$/;

这个应该匹配:

2134567
213-4567
213-456-7890
(213)456-7890
(213) 456-7890

注意:01不是有效的区号或前缀(7位电话号码的前3位)的第一个数字。

第一个捕获组将是区号。第二个是前缀(交换)。第三个是用户号码。

但是,对于验证电话号码来说,正则表达式确实是不够的。您最好使用专门的库,如Google的libphonenumber。