2016-07-15 6 views
0

그래서 저는 인턴쉽을 위해 디자인하고있는 웹 사이트의 일부 텍스트 상자를 검증하기 위해이 정규식을 만들고 있습니다.정규 표현식 : 도움말 24 미만의 숫자 매칭

문제는 정규 표현식에별로 관심이없고, 0-24 사이의 숫자와 일치하고 소수점 두 자리 이하의 숫자와 일치하는 작업자와 가깝다는 것입니다.

이것은 내가 지금까지 가지고있는 것입니다. 패턴은 또한 임의의 문자열과 일치합니다. 예 : "a" 또는 "az".

var pattern = "^([0-9]{0,2}?.?[0-9]{0,2}|1[0-9].?[0-9]{0,2}|2[0-4].?[0-9]{0,2})$"; 
+2

.. 할 수 있습니다, 물론, 당신이 원하는, 그러나 이것은 정규식없이 해결하기 쉬운만큼 보인다합니다. :-) –

+0

@DylanMeeus 아마도 OP는 HTML5 입력 패턴 속성을 사용하려고합니까? 그 외에도, 나는 더 읽을만한 대안을 추천 할 것이다. –

+0

@le_m 예! 그게 정확히 뭔가를 입력했을 때 사용자에게 경고를 표시하기 위해 일부 각도와 함께 사용하는 것입니다. – 2manyints

답변

4

은 소수점 두 자리까지 옵션으로 (제외 24) 0에서 24 사이의 숫자를 얻으려면 :

^(\d|1\d|2[0-3])(\.\d{1,2})?$ 

소수 부분 :

  • \. - 경기 소수점 도트
  • \d{1,2} - 한 자리 또는 두 자리
  • ()?은 -하게 그것을 선택

전체 부분 :

  • \d - 숫자 0-9
  • 1\d - 번호 10-19
  • 2[0-3] - 번호 20 23
  • (x|y|z) - 조금 복잡하지만 기본적으로 사용하는 당신에게 귀결 - x 중 하나 y 또는 에 관해서는

z "왜 "a""az" 일부처럼 내 버전과 일치하는 것입니다" 점들 (예 : .?). 정규식에서 점은 "임의의 한 문자"을 의미합니다. 리터럴 점과 일치 시키려면 내가했던 것처럼 슬래시로 이스케이프 처리해야합니다.


마이너 발언 : 당신이 한 자리 숫자 앞에 0이 선택하려는 경우, [01]\d1\d를 교체합니다. 한 자리 숫자에 필수 선행 0을 넣으려면 \d|1\d[01]\d으로 바꿉니다. 선행 0을 원하지 않는다면 그대로 두십시오.

+0

빠른 설명 주셔서 감사합니다! 당신의 대답은 제 것보다 훨씬 더 읽기 쉽습니다! – 2manyints

0

다음 내가 비록 이렇게 수학을 사용하는 것이 더 쉬울 수 있다고 생각 최대 두 개의 0이 아닌 자릿수를

^(([0-9])|([01][0-9])|(2[0-4]))(\.[0-9]{1,2})?$ 

와 24.99 0에서 부동 소수점 수와 일치하는 빠른 시도이다 .. .

+1

그러면 왜 "24-24.99 미만의 숫자를 매치 도움말"*이라는 질문에 따라 '24-24.99'범위를 일치시켜야합니까? – ndn

2

당신이 05 또는 5.50

^((?:[0-9]|1[0-9]|2[0-3])(?:\.(?:[1-9]|[0-9][1-9]))?)$ 

당신은 그것을 here

0

당신은 전체 정규 표현식의 설명뿐만 아니라 테스트 그것을 밖으로 here을 볼 수 있습니다 시도 할 수 있습니다 싶지 않아 가정. 또한 몇 가지 테스트 케이스를 추가했습니다.

^(\d|[01]\d|2[0-3])(\.\d{1,2})?$ 

테스트 케이스 : 당신이 정규식으로 이런 짓을 했을까 왜

Valid: 
    22 
    1.29 
    2.99 
    9.99 
    13.24 
    17.38 
    20.01 
    02.15 
    15.35 
    23.56 
    1.1 

Invalid: 
    24.29 
    235.215 
    21.256 
+0

예, 04는 여전히 0보다 크고 24보다 작습니다. 일부 사용자는 중요도가 높은 시스템에서 오류를 피하기 위해 한 자리 숫자 앞에 0을 입력합니다. – 10100111001

+0

그러나 소수점 앞에 두 자리 이상은 필요하지 않습니다. – 10100111001

+1

테스트 케이스를 추가하여 명확하게해야합니다. – 10100111001

관련 문제