Znalazłem ten kod na jakiejś stronie i działa idealnie. Sprawdza, czy numer telefonu ma jeden z następujących formatów:
(123) 456-7890 lub 123-456-7890
Problem polega na tym, że mój klient (nie wiem dlaczego, może rzeczy klienta) chce dodać inny format, dziesięć liczb kolejno, coś takiego: 1234567890 .
Używam tego wyrażenia regularnego,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Jak mogę dodać, że sprawdza również inny format? Nie radzę sobie z wyrażeniami regularnymi.
javascript
regex
Castro Roy
źródło
źródło
Odpowiedzi:
Po pierwsze, twój walidator formatu jest oczywiście odpowiedni tylko dla numerów NANP (kod kraju +1). Czy Twoja aplikacja będzie używana przez kogoś, kto ma numer telefonu spoza Ameryki Północnej? Jeśli tak, nie chcesz uniemożliwić tym osobom wprowadzenia całkowicie prawidłowego [międzynarodowego] numeru.
Po drugie, Twoja walidacja jest nieprawidłowa. Numery NANP mają postać,
NXX NXX XXXX
gdzieN
jest cyfrą 2-9 iX
cyfrą 0-9. Ponadto numery kierunkowe i giełdy nie mogą mieć formyN11
(kończyć się dwoma), aby uniknąć pomyłki z usługami specjalnymi, z wyjątkiem numerów w niegeograficznym numerze kierunkowym (800, 888, 877, 866, 855, 900) mogą miećN11
wymianę.Tak więc Twoje wyrażenie regularne przekaże numer (123) 123 4566, mimo że nie jest to prawidłowy numer telefonu. Można to naprawić poprzez wymianę
\d{3}
z[2-9]{1}\d{2}
.Wreszcie mam wrażenie, że sprawdzasz poprawność danych wejściowych użytkownika w przeglądarce internetowej. Pamiętaj, że walidacja po stronie klienta to tylko wygoda, którą zapewniasz użytkownikowi ; nadal musisz zweryfikować wszystkie dane wejściowe (ponownie) na serwerze.
TL; DR nie używają wyrażeń regularnych do weryfikacji złożonych rzeczywistych danych, takich jak numery telefonów lub adresy URL . Skorzystaj ze specjalistycznej biblioteki .
źródło
Mój wybrany regex to:
Prawidłowe formaty:
(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
źródło
i
sprawia, że w wyrażeniu nie jest rozróżniana wielkość liter im
przeprowadza wyszukiwania wielowierszowe^
początku i$
końca można znaleźć numery telefonów również w środku ciągówJeśli szukasz 10 i tylko 10 cyfr, zignoruj wszystko oprócz cyfr
źródło
return (value.match(/\d/g) || []).length == 10
albo znacznie prostsze (ale równie błędna)return value.replace(/\D/g,'').length == 10
./\D/gi.test(value)
. Wszystko, co nie jest cyfrą, w tym spacje, myślniki itp ...Zignorowałbym format i zweryfikował zawartość liczbową:
źródło
Jest to bardzo luźna opcja i wolę ją taką zachować, najczęściej używam jej w formularzach rejestracyjnych, gdzie użytkownicy muszą podać swój numer telefonu. Zwykle użytkownicy mają problemy z formularzami, które wymuszają ścisłe reguły formatowania, wolę, aby użytkownik wpisał numer i sformatował go na wyświetlaczu lub przed zapisaniem go w bazie danych. http://regexr.com/3c53v
źródło
+41 (79) 123 45 67
(Szwajcaria):/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
Poniższy REGEX zweryfikuje każdy z tych formatów:
(123) 456-7890
123-456-7890
123.456.7890
1234567890
źródło
.
bo inaczej dopasuje on dowolny znak, łamiąc twoje wyrażenie regularne.Sugerowałbym użycie czegoś jaśniejszego (zwłaszcza myśląc o tym, kto będzie musiał utrzymywać kod) ... a co z:
gdzie wyrażenie regularne jest zbudowane z przejrzystego szablonu? Dodanie nowego byłoby wtedy oczywiste, a nawet sam klient mógłby to zrobić na stronie „opcje”.
źródło
Gdzie str może być dowolnym z tych formarts: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
źródło
Wypróbuj ten - obejmuje również walidację dla formatów międzynarodowych.
/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g
To wyrażenie regularne weryfikuje następujący format:
źródło
/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/
Chociaż ten post jest stary, ale chcę opuścić mój wkład. są akceptowane: 5555555555 555-555-5555 (555)555-5555 1 (555) 555-5555 1 555 555 5555 1 555-555-5555 1 (555) 555-5555
te nie są akceptowane:
555-5555 -> aby zaakceptować to użycie:
^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$
5555555 -> aby zaakceptować to użycie:
^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$
1 555) 555-5555 123 ** & !! asdf # 55555555 (6505552368) 2 (757) 622-7382 0 (757) 622-7382 -1 (757) 622-7382 2757 622-7382 10 (757) 622 -7382 27576227382 (275) 76227382 2 (757) 6227382 2 (757) 622-7382 (555) 5 (55?) - 5555
to jest kod, którego użyłem:
źródło
To zadziała:
Te
?
oznacza, że grupa znaków poprzedzających powinny być dopasowane zero lub jeden razy. Grupa(-|\s)
dopasuje znak-
lub|
znak. Dodanie?
po drugim wystąpieniu tej grupy w Twoim wyrażeniu regularnym umożliwia dopasowanie sekwencji 10 kolejnych cyfr.źródło
naprawdę proste
źródło
Odpowiedzi wszystkich są świetne, ale oto jedna, która moim zdaniem jest nieco bardziej wszechstronna ...
Jest to napisane w celu dopasowania javascript do użycia pojedynczej liczby w jednym wierszu:
Jeśli chcesz dopasować w granicach słowa, po prostu zmień ^ i $ na \ b
Z zadowoleniem przyjmuję wszelkie sugestie, poprawki lub krytykę tego rozwiązania. O ile wiem, jest to zgodne z formatem NANP (dla numerów w USA - nie sprawdzałem poprawności innych krajów Ameryki Północnej podczas tworzenia tego), pozwala uniknąć błędów 911 (nie może być w numerze kierunkowym lub kodzie regionu), eliminuje tylko te numery 555, które są rzeczywiście nieprawidłowe (kod regionu 555, po którym następuje 01xx, gdzie x = dowolna liczba).
źródło
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
Te
?
oznacza, że grupa znaków poprzedzających powinny być dopasowane zero lub jeden razy. Grupa(-|\s)
dopasuje znak-
lub|
znak.źródło
Muszę się zgodzić, że weryfikacja numerów telefonów to trudne zadanie. Jeśli chodzi o ten konkretny problem, zmieniłbym wyrażenie regularne z
do
jako jedyny dodatkowy element, który staje się niepotrzebny, to ostatnia myślnik / spacja.
źródło
Jeśli używasz tagu wejściowego, ten kod ci pomoże. Piszę ten kod samodzielnie i myślę, że jest to bardzo dobry sposób na wykorzystanie danych wejściowych. ale możesz to zmienić za pomocą swojego formatu. Pomoże to użytkownikowi poprawić ich format na znaczniku wejściowym.
źródło
Chciałem tylko dodać rozwiązanie przeznaczone specjalnie do wybierania nielokalnych numerów telefonów (typy 800 i 900).
źródło
Ten rejestr jest odpowiedni dla międzynarodowych numerów telefonów i wielu formatów numerów komórkowych.
Oto wyrażenie regularne: / ^ (+ {1} \ d {2,3} \ s? [(] {1} \ d {1,3} [)] {1} \ s? \ D + | + \ d {2,3} \ s {1} \ d + | \ d +) {1} [\ s | -]? \ d + ([\ s | -]? \ d +) {1,2} $ /
Oto funkcja JavaScript
Sprawdza to następujące formaty:
+44 07988-825 465 (z dowolną kombinacją myślników zamiast spacji, z wyjątkiem tego, że tylko spacja musi występować po +44)
+44 (0) 7988-825 465 (z dowolną kombinacją myślników zamiast spacji, z wyjątkiem tego, że żaden łącznik nie może istnieć bezpośrednio przed lub po (0), a spacja przed lub po (0) nie musi istnieć)
123 456-789 0123 (z dowolną kombinacją myślników zamiast spacji)
123-123 123 (z dowolną kombinacją myślników zamiast spacji)
123 123456 (spację można zastąpić łącznikiem)
1234567890
Dla wszystkich formatów nie mogą istnieć podwójne spacje ani łączniki.
źródło
Sprawdź poprawność numeru telefonu + zwróć sformatowane dane
źródło
Spróbuj tego
prawidłowe formaty
https://regex101.com/r/QXAhGV/1
źródło
{1}
jest bezużyteczna,{0,}
jest lepiej napisana*
. Po co używać tych wszystkich grup przechwytywania? Spowalniają proces.Ta funkcja działała dla nas dobrze:
źródło
Proste wyrażenie regularne:
/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g
Sprawdź format, mam nadzieję, że
zadziała : 444-555-1234
f: 246.555.8888
m: 1235554567
źródło
Spowoduje to sprawdzenie dowolnego numeru telefonu o zmiennym formacie:
\\(?\d{3}\\)?
znajduje 3 cyfry w nawiasach lub nie.([\-\s\.])?
znajduje dowolny z tych znaków separatora lub nie\d{3}
znajduje 3 cyfry\1
używa pierwszego dopasowanego separatora - zapewnia to, że separatory są takie same. Tak więc (000) 999-5555 nie będzie sprawdzać poprawności w tym miejscu, ponieważ istnieje separator spacji i myślnika, więc po prostu usuń „\ 1” i zastąp go pod-wzorcem separatora (spowoduje to również sprawdzenie poprawności niestandardowych formatów). Powinieneś jednak i tak podawać wskazówki dotyczące formatu przy wprowadzaniu danych przez użytkownika.\d{4}
znajduje 4 cyfryWeryfikuje:
BTW, to jest dla JavaScript, stąd podwójne znaki ucieczki.
źródło
Wypróbuj tę funkcję js. Zwraca wartość true, jeśli pasuje, lub false, jeśli się nie powiedzie Ref
źródło
Po prostu ignoruj wszystko oprócz cyfr.
Oto czego używam:
źródło
Spróbuj tego
prawidłowe formaty:
źródło