2016-04-02 3 views
0

A plugin erlaubt es mir, wie so reguläre Ausdrücke für die Datenüberprüfung zu verwenden, wenn ich für eine einzelne Saite überprüfen:JavaScript Regex für mehrere Zeichenfolgen, die Groß- und Kleinschreibung (keine wörtliche Notation) ist

<input type="text" data-validation-regexp="^\s*[Rr][Ee][Dd]\s*$" data-validation="custom"> 

Die Regex nimmt dieses Format weil aus dem folgenden Grund: Have HTML5's a inputs pattern attribute ignore case

die Plugin-Staaten:

Dieses Plugin unterstützt auch das Attribut "Muster" durch die HTML5mitModul.

Als MDN

Muster durch angegeben - Ein regulärer Ausdruck, dass der Wert der Kontrolle wird geprüft, gegen. Das Muster muss mit dem gesamten Wert übereinstimmen, nicht nur mit einer Untermenge von . Verwenden Sie das Attribut title, um das Muster zu beschreiben, das dem Benutzer hilft. Dieses Attribut gilt, wenn der Wert des Attributs type Text, Suche, Tel, URL, E-Mail oder Passwort ist; Ansonsten wird es ignoriert. Die Sprache für reguläre Ausdrücke ist die gleiche wie für JavaScript. Das Muster ist nicht von Schrägstrichen umgeben.

Dieser reguläre Ausdruck im data-validation-regexp Attribute ist eine Alternative zu seinem wörtlichen Notation/Format, die /red/i

Dies wirft die Frage keine alternativen Möglichkeiten zu schreiben sind, gibt es:

/(rot|rouge|red|rojo)/i 

Ich mag um zu überprüfen, ob die Saiten rot, rot, rot oder rojo sind. Jedoch nicht in Literal Notation/Format, während Groß- und Kleinschreibung und Platz auf jeder Seite der Zeichenfolge zulassen. Wenn also eine dieser Zeichenfolgen vorhanden ist, wird der reguläre Ausdruck "übergeben". (Ich habe Mühe, dies nach mehreren Experimenten umzusetzen und würde die Hilfe sehr zu schätzen wissen).

Wenn auf https://regex101.com die Regex getestet /(rot|rouge|red|rojo)/i in PCRE (PHP) funktioniert, aber ich brauche eine JavaScript-Alternative und es finden muss eine Möglichkeit geben, das die OR-Operator möglicherweise zu tun verwenden.

+1

das Inline-Modifikator '' –

+0

Wie würde ich für den Fall, dass in keinem wörtliche Notation implementieren bitte oben beschriebenen (i?)? – user1554264

+0

http://StackOverflow.com/a/20829713/29157 –

Antwort

0

Sie könnten einen ternären trie erzeugen.
Das Dokument sieht so aus, als ob es der gesamten Zeichenfolge entsprechen soll.
Groß- und Kleinschreibung ist entweder mit dem Inline-Modifikator (?i) oder mit
deren Optionen Attribut (regexoptions.case_insensitive) was auch immer das sein könnte.

^(?i).*(?:^|\s)(?:r(?:ed|o(?:jo|t|uge)))(?!\S).*$

Expanded:

^
(?i) 
.* 
(?:^| \s)  # Whitespace or beginning of string (JS, no lookbehind assertions) 
(?: 
     r 
     (?: 
      ed 
     | o 
      (?: jo | t | uge) 
    ) 
) 
(?! \S)   # Whitespace boundary 
.* 
$ 
Verwandte Themen