2016-11-30 10 views
1

に一致するように、私は、同じタイプの3つ以上の連続した文字を含めることはできません正規表現正規表現は、同じタイプの文字に

ABC - valid 
@@@ - valid 
123 - valid 
ABCD - not valid 
[email protected]# - valid 
+2

あなたがこれまでにやっている私たちに示してください。 –

+6

どのように**同じタイプ**を定義しますか? –

+0

アルファベット、数字、特殊文字は個別のタイプです – ChandrasekarG

答えて

3

使用

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

が必要regex demo

/[a-z]{4}|\d{4}|[^a-z\d]{4}/iを参照してください。正規表現は一致しません(/iのため)4つの連続するASCII文字([a-z]{4})または4つの連続する数字\d{4})、またはASCII文字と数字([^a-z\d]{4})以外の4文字。

!/regex/.test()は、一致が見つかるたびにfalseを返します。

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

素敵な答えですが、RegExデモへのリンクは別のRegExを表示します –

+0

はい、私はそれをシミュレートするべきだと思ったらもっと複雑な解決策を書いていました。 –

0

あなたは長さをチェックし、あなたのタイプに基づいて文字列を分割可能性が3未満である、私はこれがちょうど正規表現では可能ではないと思います。

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) 
 
)

関連する問題