2017-03-28 2 views
-2

Ich möchte Test falsch zurück, wenn mindestens eine der folgenden Zeichen vorhanden sind: ^/,:<>[email protected]#$%^&()+=?()“|!\[#$-Wie wird der JavaScript-Test falsch zurückgegeben, wenn mindestens eines der verbotenen Zeichen vorhanden ist?

So habe ich dies:

const pattern = /[^/,:<>[email protected]#$%^&()+=?()“|!\[#$-]/ 
console.log(pattern.test('fff>')) 

Doch diese true
Codepen

kehrt Es sollte zurückkehren falsch, weil mindestens eines der verbotenen Zeichen vorhanden ist: <.

Wie ändert man die Regex um das zu reflektieren?

+1

Verwenden sie einen negativen Look-Ahead... : '(^?!. * [allofyourcharacters hier])' – Jan

+2

Es sollte * true * zurückgeben, weil ein Teil des Musters übereinstimmte. "** true, wenn es eine Übereinstimmung gibt **" - ht tps: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test –

Antwort

2

Sie sollen den Anfang mit ^ angeben und mit $ Ende und ein Plus an die Klasse +

Andernfalls

Sie paßt fff und so return true hinzuzufügen.

Wenn Sie streng starten und beenden, dann wird es einen vollständigen Test durchführen.

const pattern = /^[^/,:<>[email protected]#$%^&()+=?()“|!\[#$-]+$/; 
 
console.log(pattern.test('fff>')); // false 
 
console.log(pattern.test('fff')); // true

+2

Ziemlich sicher, dass das Zeichen '^' sich auch in der Liste der verbotenen Zeichen befindet. Sie müssen das also in die negierte Klasse aufnehmen. Aber das sollte anders funktionieren. –

1

Wie gesagt in den Kommentaren, können Sie eine negative Vorschau verwenden möchten:

const pattern = /(?!.*[/^,:<>[email protected]#$%^&()+=?()“|!\[#$-]).+/ 
 
console.log(pattern.test('fff>'))

a demo on regex101.com See.

1

Warum sollten Sie nach verbotenen Zeichen mit einer negierten Zeichenklasse suchen?

Verwenden Sie eine normale Zeichenklasse und die Dinge werden einfach.

const forbiddenChars = /[/,:<>[email protected]#$%^&()+=?()“|!\[#$-]/; 
var success = !inputString.test(forbiddenChars); 
1

Das Regex-Muster enthält zahlreiche nicht maskierte Sonderzeichen und doppelte Zeichen. Unter der Annahme, die Absicht, die Anwesenheit von einem der aufgeführten Sonderzeichen zu erkennen war, sollte dies das gewünschte Ergebnis erzielen:

const pattern = /[\\\/,:<>[email protected]#$%\^&()\+=\?"\|\[\]-]/; 
console.log(! pattern.test('fff>'); 
1

ich normalerweise tue mein Test zu überprüfen, ob Sonderzeichen bestehen und dann das negieren. Also, wenn eine spezielle Existenz sollte falsch zurückgeben. Sie müssen den folgenden Zeichen entkommen: eckige Klammern öffnen/schließen, "[" und "]"; der Backslash "\"; das Caret "^"; das Dollarzeichen "$"; die Periode oder der Punkt "."; das senkrechte Balken- oder Rohrsymbol "|"; das Fragezeichen "?"; das Sternchen "*"; das Plus/Minus-Zeichen "+"/"-"; öffne/schließe geschweifte Klammern, "{" und "}"; und zum Öffnen/Schließen Klammer "(" und ")"

const pattern = /[/,:<>[email protected]#\$%\^&\(\)\+=\?"\|!\\\[#$\-\]]/ console.log(!pattern.test('fff>'))

dieses Muster versuchen. Denken Sie daran, Muster zu finden, um Sonderzeichen zu finden, vergessen Sie nicht, das Ergebnis zu negieren. Leider bin ich nicht in der Lage, atm zu testen. Ich benutze ein mobiles Gerät. Ich werde später bearbeiten, wenn ich es teste.

Hinweis: nicht sicher, ob ich alle Metazeichen entkommen konnte.

Hinweis 2: nicht sicher, ob nicht "*" akzeptiert werden soll, wenn dies nicht der Fall ist, fügen Sie "*" zur Regex hinzu. fügen Sie es irgendwo in der Mitte hinzu

Hinweis 3: auch die Doppel in Ihrem Ausdruck Test scheint anders zu sein, das doppelte Zitat mit meiner Tastatur hergestellt. normalerweise, wenn ich Textverarbeitungsprogramm verwende, bekomme ich ein geneigtes Doppelzitat wie du hast. wenn Sie das normale Zitat hier einschließen möchten, ist es ("). wenn Sie das gekippte Zitat meinten, benötigen Sie auch das nah gekippte Zitat, leider kann ich es nicht reproduzieren. Anmerkung 3 - geupdated: den Regex redigiert haben für die normalen doppelten Anführungszeichen zu testen

EDITED -. ich getestet habe es scheint zu funktionieren https://codepen.io/anon/pen/RpYdmM?editors=1111 ich alle Sonderzeichen haben versucht, um nur einige zu sehen,

Verwandte Themen