"pattern"속성을 사용하여 사용자가 다음과 같은 두 자리를 입력 할 수 없음을 확인하고 싶습니다. 1232, 1222, 1229 등 검색 후, 나는 이런 식으로 찾았습니다 : pattern="^1(?:([2-9])(?!\1))+$"
,하지만 1232 (예를 들어)에서 작동하지 않으며 입력 한 자릿수를 고려하지 않습니다.4 자리 숫자를 입력해야합니다 (모두 다르고 첫 번째 문자는 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
과 같은 문자열이 유효성 검사를 통과하지 못하게하려면 이러한 시작 및 끝 어설 션이 필요합니다.
확인이 밖으로
// 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에는
이것이 무엇을 달성하려고하는지 잘 모르겠습니다. 이 함수를 실행할 때마다 ('ex checkDigits (1234, 4)'), 반환 값은 항상 숫자 0-9의 배열입니다. 그것이 유효하거나 그렇지 않은 경우 나는'true' 또는'false'를 반환 할 것으로 기대합니다. – KevBot
좋아, 정확히 내가 원하는 건 아니야.첫째로, 나는 또한 함수를 작성하려고 생각했다. 그러나 여기에서는 정규 표현식이 더 실용적이다. 양식에 해당 입력을 포함 시켰습니다. 제출을 클릭하면 함수가 실행되고 (onclick이라고 함) 그럼에도 다음 페이지로 리디렉션되는 함수가 실행되지만 입력이 유효하지 않은 경우에는 필요하지 않습니다. –
#KevBot 강조 값은 반환 값이 아닙니다. 숫자가 같은 숫자를 입력하면 오류가 발생하지만 catch에서는 null 대신 false를 반환 할 수 있습니다. 그러면 예상했던대로 처리됩니다. 사실을 되 돌리는 데있어 중요한 점은 무엇입니까? 배열을 반환하면 이미 진실 결과가 생성됩니다. 0을 제외한 false는 false이고 다른 모든 것은 'true'right이고 사용 된 숫자와 사용되지 않은 숫자를 반환합니다. 나중에 유용 할 수도 있습니다. – hungryWolf
- 1. "연도 형식에 4 자리 숫자를 입력해야합니다."자바 스크립트에서 .subscript
- 2. 데이터베이스에 4 자리 숫자를 포함하도록 숫자를 입력하십시오.
- 3. PHP 텍스트에서 4 자리 숫자를 모두 추출하려면 어떻게해야합니까?
- 4. 4 자리 숫자를 찾아 그들을
- 5. 첫 번째 문자는 숫자로 선택하십시오.
- 6. 4 자리 숫자를 만들기 위해 접두어 생성
- 7. 첫 번째 숫자가 임의의 16 자리 숫자를 만드는 방법은 무엇입니까?
- 8. 첫 번째 숫자를 반환하는 정규식
- 9. 첫 번째 문자를 선택하는 방법이 있습니까? : 첫 번째 문자는
- 10. RegEx - 첫 번째 그룹 4 자리 숫자와 일치하십시오.
- 11. 4 자리 숫자를 구별하기위한 정규식 패턴
- 12. Excel에서 4 자리 숫자를 시간 형식으로 변환
- 13. 4 자리 숫자를 3 개의 정수로 나눕니다.
- 14. Excel에서 4 자리 숫자를 강제하는 방법은 무엇입니까?
- 15. 정규식은 정확히 4 자리 숫자를 허용합니다. 시작
- 16. 정규식은 문자열에서 4 자리 숫자를 추출 - 안드로이드
- 17. 첫 번째 옵션을 모두 선택
- 18. 첫 번째 문자는 jquery를 사용하는 숫자가 아니어야합니다.
- 19. 첫 번째 문자는 거리 이름 자본입니까?
- 20. 문자열 입력의 첫 번째 문자는 어떻게 읽습니까?
- 21. 문자열의 첫 번째 문자는 어디에 있습니까?
- 22. Rijndael 암호화. 첫 번째 문자는 내가 사용하고
- 23. 이름을위한 RegEx : 첫 번째 문자는 대문자 여야합니다.
- 24. XML 파일의 첫 번째 문자는 무엇이어야합니까?
- 25. 문자열에서 첫 번째 숫자를 추출하십시오.
- 26. 문자열에서 첫 번째 숫자를 추출합니다.
- 27. PHP에서 4 자리 숫자를 2 개의 변수로 나눕니다.
- 28. 4 번째 자리 이후에 숫자를 복제하는 3 자리 이상이있는 줄을 출력하도록합니다.
- 29. 첫 번째 레코드가 모두 누락되었지만 첫 번째 레코드가 누락되었습니다.
- 30. 열 MySql에서 첫 번째 숫자를 제거하십시오.
이해하지 않는 (?!. * (\ D). * \ 1), 그래서 말 그대로 위의 설명은 사용을 많이하지 않았다. – hungryWolf
@ user5676973, 나는 negative lookaheads의 기본에 대한 링크를 포함시켰다. 또한이 설명이 어떻게 작동하는지 설명하기 위해 설명을 조금 더 업데이트했습니다. – KevBot
잘 작동 했으므로 자세한 설명을 위해 많은 도움을주었습니다. –