2017-01-05 18 views

답변

1

는 다음을 사용할 수 있습니다

^(?!.*(\d).*\1)1\d{3}$ 

그것은 일을 요구함으로써 작동 후 3 개 이상의 숫자. 그것은 네거티브 lookahead를 사용하여 숫자가 4 자리 숫자의 어디에서나 반복되지 않는지 확인합니다.

실행 테스트 케이스에 대한 아래의 예 :

let regex = /^(?!.*(\d).*\1)1\d{3}$/; 
 

 
function test(numberAsString) { 
 
    console.log(numberAsString, regex.test(numberAsString)); 
 
} 
 

 
test('1232'); // false, number repeated 
 
test('1222'); // false, number repeated 
 
test('1229'); // false, number repeated 
 
test('1234'); // true 
 
test('2345'); // false, 1 does not start 
 
test('1789'); // true 
 
test('12345'); // false, too many digits 
 
test('123'); // false, too little digits

정규 표현식에 대한 설명 :

1\d{3} 

그것이 하나 필요라고하는 부분입니다 , 그 다음에 3 자리수 더

(?!.*(\d).*\1) 

negative lookahead (참고 : (?!)입니다. 캡처 된 (()) 숫자 (\d)가 발견 될 때까지 전체 입력 (.*)을 검색하고 나머지 문자열 (.*)을 검색하여 자체 복사본을 찾습니다. 즉 \1입니다. 첫 번째 촬영 내용은 무엇 이었습니까? 간단히 말하자면, 어떤 점에서 1이 계속되는 1에 대한 예가 있습니다 : (?!.*1.*1). 그러나 임의의 숫자 (\d)에 특수 문자를 사용하고 있으므로 발견 된 숫자가 반복되지 않는다고 주장 할 수 있습니다.

^ 

문자열

$ 

의 시작을 주장 문자열의 끝을 주장한다. asd1234과 같은 문자열이 유효성 검사를 통과하지 못하게하려면 이러한 시작 및 끝 어설 션이 필요합니다.

+0

이해하지 않는 (?!. * (\ D). * \ 1), 그래서 말 그대로 위의 설명은 사용을 많이하지 않았다. – hungryWolf

+1

@ user5676973, 나는 negative lookaheads의 기본에 대한 링크를 포함시켰다. 또한이 설명이 어떻게 작동하는지 설명하기 위해 설명을 조금 더 업데이트했습니다. – KevBot

+0

잘 작동 했으므로 자세한 설명을 위해 많은 도움을주었습니다. –

0

확인이 밖으로

// Magical function. 
var checkDigits = function(num, maxLength) { 
    let allDigits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
    try { 
     if (num.length < 1 || num.length > maxLength) throw new Error("You need to enter exactly " + maxLength + " digits"); 
     for (let i = 0; i < num.length; i++) { 
      if (allDigits[num[i]] === null) throw new Error("You repeated a digit in your sequence"); 
      allDigits[num[i]] = null; 
     }   
    } catch (e) { 
     console.error(e); 
     return false 
    } 
    return allDigits; 
}; 

// Getting data from dom. 
var num = document.getElementById("num").value; 
// Trying to see the data in the console. 
if (num[0] == 1) console.log(checkDigits(num.slice(1))); 

글쎄 그게 내가 당신이

EDIT 이해 희망을 말할 수있는 전부 야 : 죄송합니다 나는 한 부분 미안 놓쳤다.

건배, Rj에는

+0

이것이 무엇을 달성하려고하는지 잘 모르겠습니다. 이 함수를 실행할 때마다 ('ex checkDigits (1234, 4)'), 반환 값은 항상 숫자 0-9의 배열입니다. 그것이 유효하거나 그렇지 않은 경우 나는'true' 또는'false'를 반환 할 것으로 기대합니다. – KevBot

+0

좋아, 정확히 내가 원하는 건 아니야.첫째로, 나는 또한 함수를 작성하려고 생각했다. 그러나 여기에서는 정규 표현식이 더 실용적이다. 양식에 해당 입력을 포함 시켰습니다. 제출을 클릭하면 함수가 실행되고 (onclick이라고 함) 그럼에도 다음 페이지로 리디렉션되는 함수가 실행되지만 입력이 유효하지 않은 경우에는 필요하지 않습니다. –

+0

#KevBot 강조 값은 반환 값이 아닙니다. 숫자가 같은 숫자를 입력하면 오류가 발생하지만 catch에서는 null 대신 false를 반환 할 수 있습니다. 그러면 예상했던대로 처리됩니다. 사실을 되 돌리는 데있어 중요한 점은 무엇입니까? 배열을 반환하면 이미 진실 결과가 생성됩니다. 0을 제외한 false는 false이고 다른 모든 것은 'true'right이고 사용 된 숫자와 사용되지 않은 숫자를 반환합니다. 나중에 유용 할 수도 있습니다. – hungryWolf

관련 문제