Überprüfen Sie, ob eine Zeichenfolge mit einem regulären Ausdruck in JS übereinstimmt


750

Ich möchte JavaScript verwenden (kann mit jQuery verwendet werden), um eine clientseitige Überprüfung durchzuführen, um zu überprüfen, ob eine Zeichenfolge mit dem regulären Ausdruck übereinstimmt:

^([a-z0-9]{5,})$

Im Idealfall wäre es ein Ausdruck, der wahr oder falsch zurückgibt.

Ich bin ein JavaScript-Neuling. Macht er das, match()was ich brauche? Es scheint zu prüfen, ob ein Teil eines Strings mit einem regulären Ausdruck übereinstimmt, nicht das Ganze.


Möchten Sie eine vollständige Übereinstimmung oder nur, ob die Zeichenfolge eine übereinstimmende Teilzeichenfolge enthält ?
Kerrek SB

1
Eine vollständige Übereinstimmung - keine passende Teilzeichenfolge.
Richard

Antworten:


1195

Verwenden regex.test()Sie diese Option, wenn Sie nur ein boolesches Ergebnis wünschen:

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

... und Sie können das ()aus Ihrem regulären Ausdruck entfernen, da Sie keine Erfassung benötigen.


1
Was macht die Initiale ^ in der Regex dort?
PedroD

8
@ PedroD ^ impliziert Anfang oder beginnt mit
Nagaraju

Wie würden Sie das Gegenteil tun? "fängt nicht an mit ..."
PedroD


3
@stackdave arbeitest du vielleicht eher mit Java als mit JavaScript?
Sfarbota

176

Verwendung test()Methode:

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}

3
Beachten Sie, dass die Version mit RegExpdas Einfügen von Variablenwerten in die Regex-Zeichenfolge ermöglicht.
Christophe Roussy

2
musste doppelte Anführungszeichen entfernen new RegExp("^([a-z0-9]{5,})$"), damit es funktioniert
Facundo Colombier

98

Sie können auch verwenden match():

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

Aber test()scheint schneller zu sein , wie man lesen kann hier .

Wichtiger Unterschied zwischen match()und test():

match()funktioniert nur mit Strings, aber test()auch mit ganzen Zahlen.

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true

Der Grund, warum es mit einer Zahl funktioniert, ist, dass die Zahl in eine Zeichenfolge gezwungen wird, weil sie als Parameter angegeben wird, wenn eine Zeichenfolge erwartet wird. Ich würde mich nicht auf dieses Verhalten verlassen. Dies hängt von der Implementierung von test () in Ihrer Umgebung ab. (Übereinstimmung schlägt fehl, weil Zahlen kein matchMitglied haben). Ich würde empfehlen, Ihre Nummer explizit in eine Zeichenfolge umzuwandeln, wenn Sie sie beispielsweise mit einem regulären Ausdruck verwenden möchten String(123).
Bronzdragon

Die Übereinstimmung kann hier verwendet werden. Wenn Sie sich jedoch die Leistung ansehen, ist die Leistung um test30% besser, wenn Sie nur eine Zeichenfolge validieren möchten, die mit dem regulären Ausdruck übereinstimmt, und keine Teilzeichenfolgen daraus extrahieren möchten.
Akansh

@pmrotule Ja, aber es sollte vor der Spielbeschreibung erwähnt werden.
Akansh

Der wichtigste Unterschied zwischen test und match (und matchAll) besteht darin, dass match beispielsweise eine Liste aller übereinstimmenden Unterzeichenfolgen zurückgibt, während test nur prüft, ob es welche gibt. Überprüfen Sie die Regex-Methoden in javascript.info/regexp-methods
Juan

50

Verwenden /youregexp/.test(yourString)Sie diese Option, wenn Sie nur wissen möchten, ob Ihre Zeichenfolge mit dem regulären Ausdruck übereinstimmt.


8

Hier ist ein Beispiel, das nach bestimmten HTML-Tags sucht, damit klar ist, dass /someregex/.test()ein Boolescher Wert zurückgegeben wird:

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));

2

Sie können dies versuchen, es funktioniert für mich.

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>

1

Bitte versuchen Sie diese Blume:

/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');

wahr


1

Versuchen

 /^[a-z\d]{5,}$/.test(str)


2
Welchen neuen Wert bringt diese Nur-Code-Antwort auf die Seite?
Mickmackusa

Derzeit ist es die kürzeste Lösung (aufgrund der Vereinfachung der regulären Ausdrücke)
Kamil Kiełczewski

1
Rasieren von 1 Zeichen aus Mustern, die vor Jahren veröffentlicht wurden. Gähnen.
Mickmackusa

2
Hinterlassen Sie einfach einen Kommentar unter einer früheren Antwort, 0-9um anzugeben, dass die Anzahl bis zum Ende reduziert werden kann \d. Oh, und dass eine Erfassungsgruppe nicht notwendig ist.
mickmackusa

1

Ich würde empfehlen, die Methode execute zu verwenden, die null zurückgibt, wenn keine Übereinstimmung vorliegt, andernfalls wird ein hilfreiches Objekt zurückgegeben.

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]

0
const regExpStr = "^([a-z0-9]{5,})$"
const result = new RegExp(regExpStr, 'g').test("Your string") // here I have used 'g' which means global search
console.log(result) // true if it matched, false if it doesn't
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.