Popraw numer telefonu za pomocą javascript

Próbuję zweryfikować numer telefonu, taki jak 123-345-3456 i (078)789-8908 za pomocą JavaScript. Oto Mój kod

function ValidateUSPhoneNumber(phoneNumber) {
  var regExp = /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}/;
  var phone = phoneNumber.match(regExp);
  if (phone) {
    alert('yes');
    return true;
  }
  alert('no');
  return false;
}

Testuję funkcję używając ValidateUSPhoneNumber('123-345-34567'), która ma 5 cyfr przed ostatnim myślnikiem, który jest nieprawidłowy zgodnie z regex. Ale funkcja zwraca true. Czy ktoś może wyjaśnić dlaczego?

Author: GG., 2013-08-22

14 answers

JavaScript do walidacji numeru telefonu:

function phonenumber(inputtxt) {
  var phoneno = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
  if(inputtxt.value.match(phoneno)) {
    return true;
  }
  else {
    alert("message");
    return false;
  }
}

Powyższy skrypt pasuje do:

XXX-XXX-XXXX
XXX.XXX. XXXX
XXX XXX XXXX

Jeśli chcesz użyć znaku + przed liczbą w następujący sposób
+XX-XXXX-XXXX
+XX.XXXX.XXXX
+XX XXXX XXXX
użyj następującego kodu:

function phonenumber(inputtxt) {
  var phoneno = /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/;
  if(inputtxt.value.match(phoneno)) {
    return true;
  }  
  else {  
    alert("message");
    return false;
  }
}
 40
Author: coolprarun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 04:20:52

To wyrażenie regularne /^(\([0-9]{3}\)\s*|[0-9]{3}\-)[0-9]{3}-[0-9]{4}$/ sprawdza wszystkie z następujących wartości:

'123-345-3456';
'(078)789-8908';
'(078) 789-8908'; // Note the space

Rozbić to, co się dzieje:

  1. grupa na początku waliduje na dwa sposoby, (XXX) lub XXX-, z opcjonalnymi spacjami po nawiasie zamykającym.
  2. część po sprawdzeniu grupowym dla XXX-XXX
 30
Author: Broxzier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-21 11:41:42

Oto Jak to robię.

function validate(phone) {
  const regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
  console.log(regex.test(phone))
}

validate('1234567890')     // true
validate(1234567890)       // true
validate('(078)789-8908')  // true
validate('123-345-3456')   // true
 5
Author: Muhammad Ovi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-11 16:23:04

Jest to zdecydowanie najprostszy sposób, jaki znalazłem, aby użyć JavaScript regex, aby sprawdzić format numeru telefonu. ten konkretny przykład sprawdza, czy jest to liczba 10-Cyfrowa.

<input name="phone" pattern="^\d{10}$" type="text" size="50">

Pole wejściowe jest oznaczane po kliknięciu przycisku submit, jeśli wzorzec nie pasuje do wartości, inne css lub js nie są wymagane.

 3
Author: Mike Volmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-26 06:26:13

Czy ktoś może wyjaśnić dlaczego

Ponieważ twoje Wyrażenie regularne pasuje do danych wejściowych. Chodzi o to, że wejście zawiera również Dodatkowe znaki. Dodałeś '^', aby oznaczać początek linii, ale (jak powiedział Andy) powinieneś dodać'$', aby oznaczać koniec linii.

Jeśli zaczniesz swoje Wyrażenie regularne od '^' i zakończysz je na'$', to będzie pasować tylko do linii, które pasują Tylko do twojego wyrażenia regularnego.

Rozpoczynając regex od'^', A nie kończąc na'$', dopasowujesz linie rozpoczynające się sekwencją pasującą do twojego wyrażenia regularnego, ale linie mogą mieć wszystko inne kończące pasującą sekwencję.

 2
Author: Secesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 09:21:00

Możesz użyć tej wtyczki jquery:

Http://digitalbush.com/projects/masked-input-plugin/

Patrz zakładka demo, opcja telefonu.

 1
Author: Sheetal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 09:12:35
Czy ktoś może wyjaśnić dlaczego??

Dzieje się tak, ponieważ wyrażenie regularne nie kończy się żadnym meta-znakiem kotwicy, takim jak koniec linii $ lub granica słowa \b.

Więc kiedy zapytasz silnik regex, czy {[2] } jest prawidłowym numerem telefonu, spróbuje znaleźć dopasowanie w tym łańcuchu, więc pasuje 123- z tą częścią (\([0-9]{3}\) |[0-9]{3}-) Następnie pasuje 345- z tą częścią [0-9]{3}- Następnie pasuje 3456 z tą częścią [0-9]{4}.

Teraz silnik stwierdza, że przeszedł cały regex i znalazł łańcuch wewnątrz wejścia, który pasuje do regex, chociaż znak został pozostawiony - liczba 7 - w łańcuchu wejściowym, więc zatrzymuje się i zwraca success, ponieważ znalazł pod-łańcuch, który pasuje.

Jeśli umieściłeś $ LUB \b na końcu regex, silnik idzie w ten sam sposób, co wcześniej, próbuje dopasować $ lub \b , ale znajduje ostatnią liczbę - 7- i nie jest to granica wyrazów \b ani koniec linii $, więc zatrzymuje się i nie znajduje dopasowania.

 1
Author: Ibrahim Najjar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 09:19:44

^(\(?[0-9]{3}\)?)((\s|\-){1})?[0-9]{3}((\s|\-){1})?[0-9]{4}$

Zakładając, że sprawdzasz nasze numery telefonów, to wystarczy.

Najpierw zezwalamy na 0 LUB 1 otwarty nawias \(?

Następnie pozwalamy na 3 kolejne cyfry w przedziale 0-9 [0-9]{3}

Następnie powtarzamy pierwszy krok i zezwalamy na 0 LUB 1 nawias zamykający \)?

Dla drugiej grupy zaczynamy od dopuszczenia spacji lub myślnika 0 LUB 1 razy ((\s|\-){1})?

Powtarza się to pomiędzy drugą a trzecią grupą liczb i sprawdzamy przez 3 kolejne cyfry, a następnie cztery kolejne cyfry, aby go zakończyć. Dla nas numery telefonów myślę, że to obejmuje podstawy dla wielu różnych sposobów, że ludzie mogą sformatować numer, ale jest na tyle restrykcyjne, że nie mogą przejść nieuzasadnione ciąg.

 1
Author: ryanjwessel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-29 16:25:39

W JavaScript, poniższe Wyrażenie regularne może być użyte dla numeru telefonu:

^((\+1)?[\s-]?)?\(?[1-9]\d\d\)?[\s-]?[1-9]\d\d[\s-]?\d\d\d\d

Np. 9999875099, 8750999912 itd.

Odniesienie: https://techsolutions.filebizz.com/2020/08/regular-expression-for-phone-number-in.html

 1
Author: Anamika Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-08 14:26:46

Dodaj granicę słowa \b na końcu wyrażenia regularnego:

/^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}\b/

Jeśli spacja po {[3] } jest opcjonalna:

/^(\([0-9]{3}\)\s*|[0-9]{3}-)[0-9]{3}-[0-9]{4}\b/
 0
Author: Toto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 09:22:33

Dodaj $ na końcu wyrażenia regularnego, aby oznaczać koniec wzorca:

var regExp = /^(\([0-9]{3}\)\s?|[0-9]{3}-)[0-9]{3}-[0-9]{4}$/;
 0
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 09:32:35

Jeśli używasz znacznika input, ten kod ci pomoże. Piszę ten kod sam i myślę, że jest to bardzo dobry sposób na wykorzystanie w input. ale możesz go zmienić za pomocą swojego formatu. Pomoże to użytkownikowi poprawić ich format na znaczniku wejściowym.

$("#phone").on('input', function() {  //this is use for every time input change.
        var inputValue = getInputValue(); //get value from input and make it usefull number
        var length = inputValue.length; //get lenth of input

        if (inputValue < 1000)
        {
            inputValue = '1('+inputValue;
        }else if (inputValue < 1000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, length);
        }else if (inputValue < 10000000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, length);
        }else
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, 10);
        }       
        $("#phone").val(inputValue); //correct value entered to your input.
        inputValue = getInputValue();//get value again, becuase it changed, this one using for changing color of input border
       if ((inputValue > 2000000000) && (inputValue < 9999999999))
      {
          $("#phone").css("border","black solid 1px");//if it is valid phone number than border will be black.
      }else
      {
          $("#phone").css("border","red solid 1px");//if it is invalid phone number than border will be red.
      }
  });

    function getInputValue() {
         var inputValue = $("#phone").val().replace(/\D/g,'');  //remove all non numeric character
        if (inputValue.charAt(0) == 1) // if first character is 1 than remove it.
        {
            var inputValue = inputValue.substring(1, inputValue.length);
        }
        return inputValue;
}
 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 04:06:15
/^1?\s?(\([0-9]{3}\)[- ]?|[0-9]{3}[- ]?)[0-9]{3}[- ]?[0-9]{4}$/

To potwierdzi wszystkie numery stylów amerykańskich, z lub bez 1, i z lub bez nawiasu na kodzie obszaru (ale jeśli jest używany, używany poprawnie. (902-455-4555 nie będzie działać, ponieważ nie ma nawiasu zamykającego. pozwala również na albo-lub odstęp między zestawami, jeśli jest to pożądane.) Będzie działać na przykładach podanych przez op.

 0
Author: user10952615,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-22 22:03:42

function validatePhone(inputtxt) {
  var phoneno = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
  return phoneno.test(inputtxt)
}
 -1
Author: akiva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 01:47:33