2017-11-03 25 views
0

비밀번호를 확인한 다음 정규식을 사용하여 DFA를 만들어야합니다. 세트들은은 :정규식을 사용하여 DFA를 만들 때 비밀번호 확인

A = {A, ..., Z}
| A = {A, ..., Z}
| D는 = {0, ..., 9}

기준은 :

는 문자로 시작 (케이스 경우 상하 중요하지 않다).
| 대문자가 하나 이상 있어야합니다.
| 최소 1 개의 소문자를 포함해야합니다.
| 적어도 하나의 숫자를 포함해야합니다. 그것이 올바른

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

인가 :

지금까지, 나는 다음과 같은 정규식 왔어요?

+0

어떤 정규식은 무엇입니까? BTW : 숙제처럼 보인다. – wp78de

+0

이론적 인 질문입니다. 그것은 고유 한 방언을 전혀 가지지 않습니다, 그것은 일반적인 정규 표현식입니다. 또한 정말로 브레인 스토밍 된 숙제입니다. –

+0

모든 변경 사항을 작성할 필요는 없습니다. 미리보기를 사용하십시오. – PJProudhon

답변

0

Here은 원하는 것을 수행하는 정규 표현식입니다.
그러나 이것이 당신의 탐구에 도움이되는지 나는 모른다.

lookaheads (?=.*\d)(?=.*[A-Z])

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

는 숫자 어딘가에 입력에서 대문자를 찾는 데 사용된다.

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 개의 상태가 있어야합니다. 일치시켜야 할 각 문자 조합에 대해 하나의 상태를 설정하는 것을 고려하십시오.