2017-11-03 8 views
0

正規表現を作成してパスワードを検証し、それにDFAを作成する必要があります。 セットは、次のとおり正規表現でDFAを作成するためのパスワードを確認する

= {、...、Z}
| A = {A、...、Z}
| D = {0、...、9}

基準は次のとおり

は(もし大文字または小文字を問わない)文字で始まる必要があります。
|少なくとも1つの大文字を含む必要があります。
|少なくとも1つの小文字を含める必要があります。
|少なくとも1つの数字を含む必要があります。それが正しい

(aa\*(AA\*a\*dd\*|dd\*a\*AA\*)|AA\*(aa\*A\*dd\*|dd\*A\*aa\*))(a|A|d)\* 

です:

はこれまでのところ、私は、次の正規表現で来ていますか?

+0

正規表現はどのようなものですか?ところで、宿題のように見えます。 – wp78de

+0

これは理論的な質問です。ユニークな方言はまったくありません。それは一般的な正規表現です。 また、本当にブレーンストーミングされた宿題> _ <。 –

+0

すべての変更を組み込む必要はありません。先読みを使用する。 – PJProudhon

答えて

0

Hereは、あなたが望むことをする正規表現です。
しかし、これがあなたのクエストに役立つかどうかはわかりません。

var re = /^(?=.*\d)(?=.*[A-Z])\w+$/; 
 

 
console.log(re.test('abc123')); 
 
console.log(re.test('_abc')); 
 
console.log(re.test('1abc')); 
 
console.log(re.test('abc123A')); 
 
console.log(re.test('_abcA')); 
 
console.log(re.test('1abcAB')); 
 
console.log(re.test('bob')); 
 
console.log(re.test('bob1')); 
 
console.log(re.test('1Bob')); 
 
console.log(re.test('Bob1'));

先読み(?=.*\d)(?=.*[A-Z])は桁とどこかの入力で大文字を見つけるために使用されています。

0

あなたの式の内部はやや間違っています。たとえば、AA*a*dd*の場合、 'a'で始まり、 'd'の前に 'A'が表示されますが、これは "aAaAd"と一致しません。正しいバージョンは次のとおりです。

(aa*(d(a|d)*A|A(a|A)*d)|AA*(d(A|d)*a|a(A|a)*d))(a|A|d)* 

DFAは練習として行うべきです。開始と終了を含む7つの状態を持つ必要があります。あなたが残した文字の組み合わせごとに1つの状態を確立することを考えてみましょう。

関連する問題