2017-12-22 9 views
1

Gibt es eine Möglichkeit in HTML (JavaScript) einen regulären Ausdruck zu schreiben, um eine exakte String-Übereinstimmung zu negieren?JavaScript regulärer Ausdruck, um eine exakte Übereinstimmung der Strings zu negieren

Ich möchte sicherstellen, dass ein Eingang nicht gleich "foo" ist. Nur "foo" muss die Validierung nicht bestehen, aber "fooo" muss erlaubt sein.

Mit anderen Worten, ich bin für eine Negation dieses regex suchen:

<input pattern="^foo$" ...>

+1

Sie können eine negative Vorschau verwenden: '' – anubhava

+0

Mögliche Duplikat [HTML5 Muster Wörter ausschließen] (https://stackoverflow.com/questions/13875922/html5-pattern-exclude-words) – alfasin

+0

Es scheint nicht zu funktionieren: https://codepen.io/smatric/pen/mprBMd – Mateusz

Antwort

3

Ein möglicher Weg ist Beginn Saitenanker Kombinieren (^) mit negativem Look-Ahead, dass sowohl die Zielzeichenfolge enthält und Ende der Zeichenkette Anker ($):

/^(?!foo$)/ 

Demo.

Aber pattern Muster ist lustig in diesem Konto - es muss etwas in der Zeichenfolge übereinstimmen, deshalb funktioniert der ursprüngliche Ansatz nicht. Dies funktioniert jedoch:

<input pattern="(?!foo$).*"> 
+0

Dies erlaubt nicht "fooo" – oha

+0

Dies erlaubt 'fooo' Überprüfen Sie das Demo (oder starten Sie einfach '/^(?! foo $) /. test ('fooo')' in der Konsole). Die leere Zeichenfolge wird angepasst, ja, als "^" ist _anchor_. – raina77ow

+1

Entschuldigung, Sie haben Recht - ich habe das leere Spiel nicht gesehen. Zu früh am Morgen ;-) – oha

0

Sie diese Regex verwenden können:

\bfooo\b 
0

Wenn Javascript erlaubt ist, warum nicht nur das Ergebnis des Spiels negieren?

if (!yourString.match(/^foo$/)) { 
    ... 
} 
+0

Das wird nicht funktionieren, da es auch 'fooo' nicht erlaubt. Aber es kann leicht behoben werden: '/^foo $ /' – alfasin

+0

@alfasin Hoppla! Ich habe zu viel mit Java Regex gespielt ... – Sweeper

Verwandte Themen