2017-08-28 1 views
3

Ich versuche ein E-Mail-Formularfeld zu erstellen, in dem ein Benutzer eine E-Mail im Format [email protected] eingeben muss, aber nur geschäftliche E-Mails zulassen (kein Google Mail, Yahoo, Hotmail, ect.)Verwenden mehrerer Muster im Formularfeld

Ich habe 2 Feldmuster erstellt, die unabhängig voneinander funktionieren, aber ich kann nicht scheinen, dass sie zusammenarbeiten.

Erfordert ein [email protected] Format

pattern="[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}$" 

Hat diese kostenlosen E-Mail-Domänen nicht zulassen. Nur geschäftliche E-Mails

pattern="^(?!.*@(?:live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|yandex|lycox|inbox|myway|aim|goowy|juno|(?:hot|[gy]|google|short|at|proton|hush|lycos|fast)?mail)\.\w+$).*$" 

Hier ist meine Form Code:

<form method="POST" action="#"> 

    <input type=hidden name="oid" value="00D70000000KCoG"> 
    <input type=hidden name="retURL" 
    value="#"> 

    <label for="email">Email</label><input id="email" maxlength="80" 
    name="email" size="30" type="email" 
    oninvalid="setCustomValidity('Please enter your business email here.')" 
    onchange="try{setCustomValidity('')}catch(e){}" pattern="[a-z0- 
    9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}$" required /> 

    <input type="submit" name="submit" value="Submit"> 
    </form> 
+0

Ich frage aus Neugier - gibt es einen Unterschied zwischen der Angabe von 'pattern =" [a-z0-9 ._% + -] + @ [a-z0-9 .-] + \. [Az] {2 , 4} $ "' und spezifiziert 'type =" email "'? – Rounin

+1

type = "email" erlaubt die Eingabe der E-Mail a @ b, aber pattern = "[a-z0-9 ._% + -] + @ [a-z0-9 .-] + \. [Az] { 2,4} $ "erlaubt nur E-Mails im Format [email protected] –

+0

@Felicia Bitte überprüfen Sie meine Antwort unten und lassen Sie wissen, ob es für Sie gut funktioniert oder Sie mehr Hilfe benötigen. –

Antwort

1

Hier sind die beiden Muster kombiniert:

pattern="[a-z0-9._%+-][email protected](?!(?:live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|yandex|lycox|inbox|myway|aim|goowy|juno|(?:hot|[gy]|google|short|at|proton|hush|lycos|fast)?mail)\.\w+$)[a-z0-9.-]+\.[a-z]{2,4}" 

Beachten Sie, dass die ^ am Anfang und $ am Ende nicht notwendig sind, wie sie sind implizit dort: pattern Wert ist mit ^(?: und )$ um den gesamten Eingang v gewickelt alue.

Siehe die regex demo.

Einzelheiten

  • ^ - implizit - Beginn der Zeichenfolge
  • [a-z0-9._%+-]+ - ein oder mehr Buchstaben, Ziffern, ., _, %, + oder -
  • @ - ein @
  • (?!(?:live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|yandex|lycox|inbox|myway|aim|goowy|juno|(?:hot|[gy]|google|short|at|proton|hush|lycos|fast)?mail)\.\w+$) - ein negativer Lookahead das nicht das Spiel, wenn das Muster rechts von der aktuellen Position übereinstimmt sofort (dh nach @)
  • [a-z0-9.-]+ - 1+ Klein ASCII-Buchstaben, Ziffern, . oder/und -
  • \. - ein Punkt
  • [a-z]{2,4} - 2 bis 4 ASCII-Kleinbuchstaben.

HINWEIS: Sie könnten A-Z zu den Charakterklassen hinzufügen möchten: [a-z0-9._%+-]+ =>[\w.%+-]+ und [a-z0-9.-]+ =>[a-z0-9A-Z.-]+.