2013-08-26 1 views
2

10 진수 값만 포함해야하는 입력 텍스트 상자의 유효성을 검사하는 일반 표현식을 작성하려면 어떻게해야합니까? 이 값은 쉼표를 구분 기호로 사용하여 최대 세 자리까지 (단 하나도 없음) 가질 수 있습니다.10 진수에 대한 정규 표현식 (최대 3 자리 10 진수, 쉼표 사용)

예를 들어, 아래에 주어진이 값이 유효합니다 -

 
1,234 
1,23 
1,2 
1 

이 유효하지 않은 :

 
1,2345 (too many decimal numbers) 
A (a letter is not a number) 
    (a space or string empty) 
1.234 (used a dot instead of a comma) 
+4

이'1 일 수있다, 인정하고 싶지 않은 경우 , '유효합니까? –

+0

', 1'은 유효합니까? – Tory

답변

2

방법에 대한 @"\d+,?\d{0,3}" : 1 개 이상의 숫자, 다음 옵션 쉼표, 다음 0 ~ 3 자리 더. 이것은 쉼표 앞에 임의의 자릿수를 허용한다고 가정합니다. 귀하의 예에서는 하나만 가지고 있으며,이 경우 +을 제거하고 싶습니다.

[0-9]+(,[0-9]{1,3})? 
+0

감사합니다. 게이. – Ciupaz

+0

이것은 실수라고 믿는'1 '과 일치하는 것 같습니다. – pguardiario

+0

@pguardiario : OP가 그 질문에 대답하지 않았습니다. 그것이 유효한 것이 가능한 견적입니다. – Gabe

2

당신은 이런 패턴을 사용할 수 있습니다 값 1,이 유효하지 않은 경우

, 당신은 끝으로 ?를 이동해야합니다

\d+(?:,\d{1,3})? 

는 설명 : -

+1

감사합니다. 해결책이 될 수 있습니다. L – Ciupaz

+1

나는 정규식에있는 시동기를 위해이 것을 좋아한다.이 해결책은 가장 직설적이다. – AutomatedChaos

7

이런 식으로 뭔가를 시도 : @"\d+(,\d{1,3})?"

+1

+1 이것이 올바른 대답이지만 비 캡처 그룹은 실제로 불필요한 복잡성을 추가합니다. IMO – pguardiario

1

참고가 하나 개의 문자가 소수점 전에 제거하려는 경우 +

^\d+(,(\d?){3})?$ 


^ //start 
\d+ //one or more decimal digits 
(,(\d?){3})? //a comma, followed by up to 3 decimal digits, optionally 
$ //end 

당신이 1, 후 중간 부분이 (,\d(\d?){2})?

+0

앵커는 아주 좋은 아이디어입니다. –

+0

이 대답은 너무 많습니다'?'의 – pguardiario

+0

@pguardiario 나는 그것을 확신하지 못합니다. 나는 그것을 철저히 테스트했습니다. 너? ? 두 번째 절에서 3 개의 소수 자릿수 각각을 선택 사항으로 만들지는 않습니다. 그런 경우에는 {1,3} – vroomfondel