webentwicklung-frage-antwort-db.com.de

Übereinstimmungen von Sonderzeichen und Buchstaben in Regex

Ich versuche, eine Zeichenfolge zu validieren, die nur aus Ziffern und Sonderzeichen &-._ bestehen sollte. Dafür habe ich es mit einem regulären Ausdruck versucht.

var pattern = /[a-zA-Z0-9&_\.-]/
var qry = 'abc&*';
if(qry.match(pattern)) {
    alert('valid');
}
else{
    alert('invalid');
}

Bei Verwendung des obigen Codes ist der String abc&* gültig. Aber meine Anforderung ist es, diese ungültig zu zeigen. Wenn also ein anderes Zeichen als ein Buchstabe, eine Zahl oder Sonderzeichen &-._ verwendet wird, sollte der String als ungültig ausgewertet werden. Wie kann ich das mit einer Regex tun? 

28
Khaleel

Fügen Sie sie zu den zulässigen Zeichen hinzu, aber einige davon müssen ausgeblendet werden, z. B. -]/\.

var pattern = /^[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/

Auf diese Weise können Sie jeden einzelnen Charakter entfernen, den Sie nicht zulassen möchten.

Außerdem möchten Sie den Anfang und das Ende der Ortsmarken für Zeichenfolgen ^ und $ angeben

Update:

Wie elclanrs verstanden (und der Rest von uns ursprünglich nicht), sind die only Sonderzeichen, die in dem Muster zulässig sein müssen, & -._

/^[\w&.\-]+$/

[\ w] ist das gleiche wie [a-zA-Z0-9_]

Obwohl der Bindestrich am Anfang oder Ende der Liste nicht entfernt werden muss, ziehe ich es vor, wenn andere Zeichen hinzugefügt werden. Zusätzlich bedeutet das +, dass Sie mindestens eines der aufgelisteten Zeichen benötigen. Wenn Null in Ordnung ist (dh ein leerer Wert), ersetzen Sie ihn stattdessen durch ein *:

/^[\w&.\-]*$/
46

Warum fügen Sie sie nicht einfach zu Ihrer vorhandenen Charakterklasse hinzu?

var pattern = /[a-zA-Z0-9&._-]/

Wenn Sie prüfen müssen, ob eine Zeichenfolge nur aus diesen Zeichen besteht, müssen Sie auch Anker den Ausdruck verwenden:

var pattern = /^[a-zA-Z0-9&._-]+$/

Die hinzugefügten ^ und $ stimmen jeweils mit dem Anfang und dem Ende der Zeichenfolge überein.

Das Testen von Buchstaben, Zahlen oder Unterstrichen kann mit \w durchgeführt werden, wodurch der Ausdruck verkürzt wird:

var pattern = /^[\w&.-]+$/

Wie in dem Kommentar von Nathan erwähnt, ist es besser, .match() zu verwenden, wenn Sie nicht die Ergebnisse von RegExp.test() verwenden (es gibt ein Array mit dem übereinstimmenden Ergebnis zurück).

if (pattern.test(qry)) {
    // qry is non-empty and only contains letters, numbers or special characters.
}

Update 2

Falls ich die Frage falsch verstanden habe, wird im Folgenden geprüft, ob alle drei Bedingungen erfüllt sind.

if (/[a-zA-Z]/.test(qry) && /[0-9]/.test(qry) && /[&._-]/.test(qry)) {
   // qry contains at least one letter, one number and one special character
}
16
Ja͢ck

Versuchen Sie diese Regex:

/^[\w&.-]+$/

Sie können auch test verwenden.

if ( pattern.test( qry ) ) {
  // valid
}
10
elclanrs
let pattern = /^(?=.*[0-9])(?=.*[[email protected]#$%^&*])(?=.*[a-z])(?=.*[A-Z])[[email protected]#$%^&*]{6,16}$/;

//following will give you the result as true(if the password contains Capital, small letter, number and special character) or false based on the string format

let reee =pattern .test("[email protected]");   //true as it contains all the above
0
Amrutha VS

Probieren Sie dieses RegEx aus: Passende Sonderzeichen, die wir in Absätzen und Alphabeten verwenden

   Javascript : /^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$/.test(str)

                .test(str) returns boolean value if matched true and not matched false

            c# :  ^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$
0