Ü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.

Richard
quelle
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.

user113716
quelle
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");
}
Abhijeet Kasurde
quelle
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
pmrotule
quelle
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.

user278064
quelle
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');
user2449231
quelle
6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));
Eysun
quelle
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>
Tongi
quelle
1

Bitte versuchen Sie diese Blume:

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

wahr

Jaber Alshami
quelle
1

Versuchen

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

Kamil Kiełczewski
quelle
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]
Juan Navarrete
quelle
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
Geetanshu Gulati
quelle