2017-06-27 2 views
-2

Dies ist mein regex Code, der mit jQuery Validierung Bibliothek funktioniert:HTML5 Muster regex nicht genehmigt meine [richtig] regex hinter dem „@“ für eine E-Mail-Validierung

return /^(("[\w-\s]+")|([\s\w\+-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{1,66})\.([a-z]{2,6}\s*(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?)$/i

es ein Hinzufügen andere HTML5-Seite ohne die jQuery-Validator führt einen Fehler:

Pattern attribute value /^(("[\w-\s]+")|([\s\w+-]+(?:.[\w-]+))|("[\w-\s]+")([\w-]+(?:.[\w-]+)))(@((?:[\w-]+.)\w[\w-]{1,66}).([a-z]{2,6}\s(?:.[a-z]{2})?)$)|(@[?((25[0-5].|2[0-4][0-9].|1[0-9]{2}.|[0-9]{1,2}.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2}).){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})]?)$/i is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: //^(("[\w-\s]+")|([\s\w+-]+(?:.[\w-]+))|("[\w-\s]+")([\w-]+(?:.[\w-]+)))(@((?:[\w-]+.)\w[\w-]{1,66}).([a-z]{2,6}\s(?:.[a-z]{2})?)$)|(@[?((25[0-5].|2[0-4][0-9].|1[0-9]{2}.|[0-9]{1,2}.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2}).){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})]?)$/i/: Invalid character class

Nicht erlaubt:

  • ein

  • aa

  • Kartoffel @

erlauben:

Dies ist der HTML-Code:

<input type="email" id="email" name="email" placeholder="" required="true" class="input-xlarge" pattern='/^(("[\w-\s]+")|([\s\w\+-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{1,66})\.([a-z]{2,6}\s*(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?)$/i'> 
+1

Sie haben den Typ der Eingabe bereits als 'email' angegeben. Keine Notwendigkeit, eine Regex zu bestehen (es wird nicht berücksichtigt). Oder verwende 'type =" text "'. –

+1

Ich würde eine manuelle binäre Suche für das Problem empfehlen. Löschen Sie die Hälfte des regulären Ausdrucks, prüfen Sie, ob der Fehler weiterhin besteht. Jetzt wissen Sie, welche Hälfte das Problem hat. Mach weiter, bis du es entdeckt hast. – smarx

+1

Lesen Sie auch, warum es eine wirklich schlechte Idee ist, einen regulären Ausdruck wie diesen zu verwenden, um zu versuchen, E-Mail-Adressen zu validieren. Ich habe keine Links zur Hand, aber es wurde viel diskutiert. – smarx

Antwort

1

Die ungültige Zeichenklasse ist [\w-\s]. Dieser Bereich macht keinen Sinn. Ich denke du meinst [\w\s-] (keine Reichweite). Mit dieser Änderung fallen die /^ und $/i um den Ausdruck, und type="text", so dass das Muster tatsächlich angewendet wird, scheinen die Dinge zu arbeiten. Versuchen Sie aber bitte nicht, einen regulären Ausdruck zu verwenden, um E-Mail-Adressen zu validieren.

<form> 
 
<input type="text" id="email" name="email" placeholder="" required="true" class="input-xlarge" pattern='(("[\w\s-]+")|([\s\w\+-]+(?:\.[\w-]+)*)|("[\w\s-]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{1,66})\.([a-zA-Z]{2,6}\s*(?:\.[a-zA-Z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?)'> 
 
<input type="submit"> 
 
</form>

EDIT

Per der Diskussion in den Kommentaren unten, vielleicht [\w-\s]ist bedeutete eine Reihe zu sein, so dass meine bearbeiten (obwohl der Fehler loszuwerden) ist vielleicht nicht semantisch dasselbe wie die JavaScript-Interpretation des ursprünglichen Musters.

+0

'/ [\ w- \ s] /' ist ein korrektes Muster in JS regex, '/ [\ w- \ s]/u' ist nicht. –

+0

@ WiktorStribiżew Sorry, was/wo ist das '/ u'? – smarx

+0

In ES6 wird das HTML5-Muster standardmäßig mit dem Modifikator '/ u' kompiliert. –