사용자가 입력 한 문자열의 유효성을 검사해야합니다. 문자열에 쉼표로 구분 된 숫자 또는 범위를 허용해야합니다. 숫자는 1에서 64 사이 여야합니다.숫자 및/또는 숫자 범위를 쉼표로 구분하지만 범위는 1-64 사이 인 숫자를 허용하려면 Regex
Sample: 1,8,7-9,10-12,20-45
쉼표 또는 '-'앞뒤에 공백이 허용됩니다.
사용자가 입력 한 문자열의 유효성을 검사해야합니다. 문자열에 쉼표로 구분 된 숫자 또는 범위를 허용해야합니다. 숫자는 1에서 64 사이 여야합니다.숫자 및/또는 숫자 범위를 쉼표로 구분하지만 범위는 1-64 사이 인 숫자를 허용하려면 Regex
Sample: 1,8,7-9,10-12,20-45
쉼표 또는 '-'앞뒤에 공백이 허용됩니다.
가고,
^(?:6[0-4]|[1-5]\d|[1-9])(?: *- *(?:6[0-4]|[1-5]\d|[1-9]))?(?: *, *(?:6[0-4]|[1-5]\d|[1-9])(?: *- *(?:6[0-4]|[1-5]\d|[1-9]))?)*$
는 또한 <space>*
대신 \s*
\s
때문에 경기 개행 문자를 사용했다. 개행 문자에 문제가 없으면 공백 대신 \s
을 사용하십시오. 0 개 이상의 공백이 아닌 선택적 공백을 허용하려면 <space>*
대신 \s?
을 사용하십시오.
이것은 총체적 인 것처럼 보입니다. 정규 표현식은 문자열이 아닌 숫자와 매치되기 때문에 간단한 답이라고 생각합니다. 이 밝혀 0과 64 사이의 값이
[1-6]?[0-9]
같은 보이는 아마 (그러나 공백 또는 쉼표) 여기서
[1-6]?[0-9](\-[1-6]?[0-9])?
EDIT
I 직접 혼입 범위 일부 입력 된 공백과 쉼표로 "?" 바로 뒤에 (한 번 나타나거나 전혀 나타나지 않습니다.) 여러 공간을 허용하려면 관련 "?" "*"나는 이것이 작동 할 것이라고 100 % 약속 할 수는 없지만 그것을 한 장씩 구성하면 작동 할 것이라고 믿습니다.
\([1-6]?[0-9]\(?\- ?[1-6]?[0-9]\)? ?,? ?\)+
내가 더 나은 뭔가를 요리 할 경우 업데이트하려고합니다
. 내가 제대로 그룹화로 작성했다면
EDIT2
내 오래된 패턴은 0 일치합니다. 이것을 시도해 봅시다 :
((([1-5]?[0-9])|(6[0-4])((\s?\-\s?([1-5]?[0-9])|(6[0-4]))?)(\s?,\s?)?)+
해피 코딩! 궁금한 점이 있으면 의견을 남기십시오.
다음'([1-5]?[0-9]) | (6 [0-4])' –
op가 '0'과 일치하지 않음을 유의하십시오. –
Oh jeez ... 그룹화를 엉망으로 만들었습니다 ... 다시 편집해야합니다. – Matt
이 1-64 사이의 정수와 일치해야합니다.
([1-9]|[1-5][0-9]|6[0-4])
범위도 허용해야합니다.
([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?
한 줄에 하나 이상을 매치합니다.
^(([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?\s*($|,\s*))+$
하지만 범위가 20-45이고 64-45가 아니라는 것을 어떻게 알 수 있습니까? 하나는 그러한 가치가 없다고 희망 할 수 있습니다! –
나는 그것을 검증하기 위해 정규식을 사용하지 않을 것이다. 모든 프로그래밍 언어에서이를 확인하는 함수를 작성하는 것은 간단합니다. 나는 정규 표현식으로 그것을하는 합리적인 방법을 생각할 수 없다. –
훌륭하고 간결합니다. 그러나 끝에는 쉼표를 사용할 수 있습니다. –
무엇을 시도 했습니까? –
정규식은이 문제에 접근하는 최선의 방법이 아닙니다. 먼저 쉼표로 문자열을 분할 한 다음 내부에 # 또는 범위가 있는지 확인하십시오. 후자의 경우, 하이픈을 분리하고 범위의 첫 번째 부분이 마지막 부분보다 작은 지 확인합니다. –
숫자 값을 정규 표현식으로 검사하는 것은 페인트를 해머로 저어주는 것과 같습니다. 당신은 할 수 있지만, 그것을하는 가장 좋은 방법은 아닙니다. –