2016-11-30 3 views

Antwort

3

Verwenden

if (!/[a-z]{4}|\d{4}|[^a-z\d]{4}/i.test(s)) { console.log("valid"); } 

Siehe regex demo

Die /[a-z]{4}|\d{4}|[^a-z\d]{4}/i enthält Regex passt auf fallunempfindliche Weise (aufgrund /i) 4 aufeinanderfolgende ASCII-Buchstaben ([a-z]{4}) oder 4 aufeinander folgenden Ziffern (\d{4}) oder 4 Zeichen außer ASCII-Buchstaben und -Ziffern ().

Die Überprüfung !/regex/.test() gibt immer false zurück, wenn die Übereinstimmung gefunden wird.

var strs = ['ABC','@@@','123','[email protected]#','ABCD']; 
 
var rx = /[a-z]{4}|\d{4}|[^a-z\d]{4}/i; 
 
for (var s of strs) { 
 
    if (!rx.test(s)) { 
 
    console.log(s, ": valid"); 
 
    } else { 
 
    console.log(s, ": invalid"); 
 
    } 
 
}

+0

nette Antwort, aber der Link zur RegEx Demo zeigen eine andere RegEx –

+0

Ja, ich schrieb eine kompliziertere Lösung, wenn ich dachte, es sollte simplifiziert werden. –

0

Sie könnten die Zeichenfolge aufgeteilt basierend auf Typen, dann überprüfen Sie die Länge weniger als 3 ist, ich glaube nicht, das mit nur RegExp möglich ist.

const tests = [ 
 
    'ABC', 
 
    '@@@', 
 
    '123', 
 
    'ABCD', 
 
    '[email protected]#' 
 
] 
 

 
function validate(string){ 
 
    return string.split(/([A-Z]+|[0-9]+|@+|\W+)/) 
 
    .every(str => str.length <= 3) 
 
} 
 

 
console.log(
 
    tests.map(validate) 
 
)