Ich habe diesen Code auf einer Website gefunden und er funktioniert perfekt. Es wird überprüft, ob die Telefonnummer in einem der folgenden Formate
vorliegt : (123) 456-7890 oder 123-456-7890
Das Problem ist, dass mein Client (ich weiß nicht warum, vielleicht Client-Sachen) ein anderes Format hinzufügen möchte, die zehn Zahlen nacheinander, ungefähr so: 1234567890 .
Ich benutze diesen regulären Ausdruck,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Wie kann ich hinzufügen, dass es auch das andere Format validiert? Ich bin nicht gut mit regulären Ausdrücken.
javascript
regex
Castro Roy
quelle
quelle
Antworten:
Zunächst einmal ist Ihr Formatprüfer offensichtlich nur für NANP- Nummern (Ländercode +1) geeignet . Wird Ihre Anwendung von jemandem mit einer Telefonnummer außerhalb Nordamerikas verwendet? In diesem Fall möchten Sie nicht verhindern, dass diese Personen eine vollständig gültige [internationale] Nummer eingeben.
Zweitens ist Ihre Validierung falsch. NANP Zahlen die Form ,
NXX NXX XXXX
woN
eine Ziffer 2-9 undX
eine Ziffer 0-9. Außerdem haben Vorwahlen und Vermittlungsstellen möglicherweise nicht die FormN11
(Ende mit zwei), um Verwechslungen mit speziellen Diensten zu vermeiden, außer dass Nummern in einer nicht geografischen Vorwahl (800, 888, 877, 866, 855, 900) möglicherweise eineN11
Vermittlungsstelle haben.Ihr regulärer Ausdruck übergibt also die Nummer (123) 123 4566, obwohl dies keine gültige Telefonnummer ist. Sie können das Problem beheben , indem Austausch
\d{3}
mit[2-9]{1}\d{2}
.Schließlich habe ich das Gefühl, dass Sie Benutzereingaben in einem Webbrowser überprüfen. Denken Sie daran, dass die clientseitige Validierung nur eine Annehmlichkeit ist, die Sie dem Benutzer bieten . Sie müssen noch alle Eingaben (erneut) auf dem Server überprüfen.
TL; DR verwendet keinen regulären Ausdruck, um komplexe reale Daten wie Telefonnummern oder URLs zu validieren . Verwenden Sie eine spezielle Bibliothek .
quelle
Mein Regex der Wahl ist:
Gültige Formate:
(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
quelle
i
macht den Ausdruck unabhängig von Groß- und Kleinschreibung undm
führt mehrzeilige Suchen durch^
am Anfang und$
am Ende entfernen, finden Sie auch Telefonnummern in der Mitte der ZeichenfolgenWenn Sie nach 10 und nur 10 Ziffern suchen, ignorieren Sie alles außer den Ziffern.
quelle
return (value.match(/\d/g) || []).length == 10
oder das viel einfachere (aber ebenso fehlerhafte) :return value.replace(/\D/g,'').length == 10
./\D/gi.test(value)
. Alles, was keine Ziffer ist, einschließlich Leerzeichen, Bindestriche usw.Ich würde das Format ignorieren und den numerischen Inhalt überprüfen:
quelle
Dies ist eine sehr lockere Option, und ich ziehe es vor, sie so zu halten. Meistens verwende ich sie in Registrierungsformularen, in denen die Benutzer ihre Telefonnummer hinzufügen müssen. Normalerweise haben Benutzer Probleme mit Formularen, die strenge Formatierungsregeln durchsetzen. Ich bevorzuge, dass Benutzer die Nummer und das Format in der Anzeige eingeben oder bevor sie in der Datenbank gespeichert werden. http://regexr.com/3c53v
quelle
+41 (79) 123 45 67
(Schweiz) zu ermöglichen:/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
Der folgende REGEX validiert eines dieser Formate:
(123) 456-7890
123-456-7890
123.456.7890
1234567890
quelle
.
sonst stimmt es mit einem beliebigen Zeichen überein und bricht Ihren regulären Ausdruck.Ich würde vorschlagen, etwas klareres zu verwenden (insbesondere zu überlegen, wer den Code pflegen muss) ... was ist mit:
Wo wird der reguläre Ausdruck aus einer klaren Vorlage erstellt? Das Hinzufügen eines neuen wäre dann ein Kinderspiel und möglicherweise könnte sogar der Kunde selbst dies auf einer "Options" -Seite tun.
quelle
Wobei str eines dieser Formulare sein könnte: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
quelle
Probieren Sie dieses aus - es beinhaltet auch die Validierung für internationale Formate.
/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g
Dieser reguläre Ausdruck überprüft das folgende Format:
quelle
/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/
Dieser Beitrag ist zwar alt, möchte aber meinen Beitrag hinterlassen. Diese werden akzeptiert: 5555555555 555-555-5555 (555)555-5555 1 (555) 555-5555 1 555 555 5555 1 555-555-5555 1 (555) 555-5555
diese werden nicht akzeptiert:
555-5555 -> um diese Verwendung zu akzeptieren:
^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$
5555555 -> um diese Verwendung zu akzeptieren:
^\+?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 2 757 622-7382 10 (757) 622 -7382 27576227382 (275) 76227382 2 (757) 6227382 2 (757) 622-7382 (555) 5 (55?) - 5555
Dies ist der Code, den ich verwendet habe:
quelle
Das wird funktionieren:
Das
?
Zeichen bedeutet, dass die vorhergehende Gruppe null oder einmal übereinstimmen sollte. Die Gruppe entspricht(-|\s)
entweder einem-
oder einem|
Zeichen. Durch Hinzufügen?
nach dem zweiten Auftreten dieser Gruppe in Ihrem regulären Ausdruck können Sie eine Folge von 10 aufeinander folgenden Ziffern abgleichen.quelle
wirklich einfach
quelle
Alle Antworten sind großartig, aber hier ist eine, die ich für etwas umfassender halte ...
Dies ist für die Verwendung von Javascript-Übereinstimmungen mit einer einzelnen Zahl in einer einzelnen Zeile geschrieben:
Wenn Sie an Wortgrenzen übereinstimmen möchten, ändern Sie einfach ^ und $ in \ b
Ich freue mich über Vorschläge, Korrekturen oder Kritik an dieser Lösung. Soweit ich das beurteilen kann, entspricht dies dem NANP-Format (für USA-Nummern - ich habe andere nordamerikanische Länder bei der Erstellung nicht validiert), vermeidet 911-Fehler (kann nicht in der Vorwahl oder der Vorwahl enthalten sein), beseitigt nur die 555 Nummern, die tatsächlich ungültig sind (Regionalcode 555 gefolgt von 01xx, wobei x = eine beliebige Nummer).
quelle
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
Das
?
Zeichen bedeutet, dass die vorhergehende Gruppe null oder einmal übereinstimmen sollte. Die Gruppe entspricht(-|\s)
entweder einem-
oder einem|
Zeichen.quelle
Ich muss zustimmen, dass die Validierung von Telefonnummern eine schwierige Aufgabe ist. Für dieses spezielle Problem würde ich den regulären Ausdruck von ändern
zu
als einziges weiteres Element, das unnötig wird, ist der letzte Bindestrich / Leerzeichen.
quelle
Wenn Sie ein Eingabe-Tag verwenden, hilft Ihnen dieser Code. Ich schreibe diesen Code selbst und denke, dass dies eine sehr gute Möglichkeit ist, Eingaben zu verwenden. Sie können es jedoch mit Ihrem Format ändern. Es hilft dem Benutzer, sein Format auf dem Eingabe-Tag zu korrigieren.
quelle
Ich wollte nur eine Lösung speziell für die Auswahl nicht lokaler Telefonnummern (800 und 900 Typen) hinzufügen.
quelle
Diese Registrierung eignet sich für internationale Telefonnummern und verschiedene Formate von Mobiltelefonnummern.
Hier ist der reguläre Ausdruck: / ^ (+ {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} $ /
Hier ist die JavaScript-Funktion
Dies validiert die folgenden Formate:
+44 07988-825 465 (mit einer beliebigen Kombination von Bindestrichen anstelle von Leerzeichen, außer dass nur ein Leerzeichen auf +44 folgen darf)
+44 (0) 7988-825 465 (mit einer beliebigen Kombination von Bindestrichen anstelle von Leerzeichen, außer dass kein Bindestrich direkt vor oder nach (0) vorhanden sein kann und das Leerzeichen vor oder nach (0) nicht vorhanden sein muss)
123 456-789 0123 (mit einer beliebigen Kombination von Bindestrichen anstelle der Leerzeichen)
123-123 123 (mit einer beliebigen Kombination von Bindestrichen anstelle der Leerzeichen)
123 123456 (Leerzeichen können durch einen Bindestrich ersetzt werden)
1234567890
Für alle Formate können keine doppelten Leerzeichen oder doppelten Bindestriche vorhanden sein.
quelle
Überprüfen Sie die Telefonnummer und geben Sie formatierte Daten zurück
quelle
Versuche dies
gültige Formate
https://regex101.com/r/QXAhGV/1
quelle
{1}
ist nutzlos,{0,}
ist besser geschrieben*
. Warum all diese Erfassungsgruppen verwenden? Sie verlangsamen den Prozess.Diese Funktion hat bei uns gut funktioniert:
quelle
Einfacher regulärer Ausdruck:
/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g
Schauen Sie sich das Format an und hoffen Sie, dass es funktioniert:
444-555-1234
f: 246.555.8888
m: 1235554567
quelle
Dadurch wird jede Telefonnummer mit variablem Format überprüft:
\\(?\d{3}\\)?
findet 3 Ziffern in Klammern oder nicht.([\-\s\.])?
findet eines dieser Trennzeichen oder nicht\d{3}
findet 3 Ziffern\1
verwendet das erste übereinstimmende Trennzeichen - dies stellt sicher, dass die Trennzeichen identisch sind. Daher wird (000) 999-5555 hier nicht validiert, da ein Leerzeichen und ein Strich-Trennzeichen vorhanden sind. Entfernen Sie einfach das "\ 1" und ersetzen Sie es durch das Trennzeichen-Untermuster (dies validiert auch nicht standardmäßige Formate). Sie sollten jedoch ohnehin Formathinweise für Benutzereingaben verwenden.\d{4}
findet 4 ZiffernValidiert:
Übrigens ist dies für JavaScript, um Escapezeichen zu verdoppeln.
quelle
Versuchen Sie diese js-Funktion. Gibt true zurück , wenn es passt und falsch , wenn es fehlschlägt Ref
quelle
Ignoriere einfach alles außer Ziffern.
Folgendes benutze ich:
quelle
Versuche dies
gültige Formate:
quelle