2016-12-13 4 views
1

쉼표를 사용하거나 사용하지 않고 모든 숫자 (예 : + ve와 -ve) 및 십진수 (+ ve와 -ve)에 대해 일반 표현식을 만들고 싶습니다.쉼표를 사용하거나 사용하지 않는 정수의 정규식

예를 들어 정규 표현식은 다음 숫자 형식을 포함해야합니다.

111  1.11  1,111  1,111.01  1,111,111.01 
+111 +1.11 +1,111 +1,111.01 +1,111,111.01 
-111 -1.11 -1,111 -1,111.01 -1,111,111.01 

내 시나리오를 처리하기 위해 두 개의 정규 표현식을 만들었습니다.

"^(\\+|-)?[0-9]\\d*(\\.\\d+)?$" // handles whole numbers with decimals 
"^(\\+|-)?[0-9]\\d*(\\,\\d+)*?$" // handles whole numbers with commas 

이제 두 가지 정규 표현식을 병합하여 내 요구 사항을 해결하고 싶습니다.

아무도 도와 줄 수 있습니까?
미리 감사드립니다.

+0

[소수점 이하 자리는 선택 사항입니다 십진수 정규 표현식]의 사용 가능한 복제 (http://stackoverflow.com/questions/12117024/decimal-number-regular-expression-where-digit-after-decimal-is-optional) [구체적으로 여기에 답변] (http://stackoverflow.com/a/ 23872060/2064981) – ClasG

+1

@Clas G : [도움을받지 못한다] (https://regex101.com/r/68lRyr/1). –

답변

1

당신은 regex demo

세부를 참조

^[+-]?[0-9]+(?:,[0-9]+)*(?:[.][0-9]+)?$ 

처럼 당신의이 두 패턴을 병합 할 수 있습니다

  • ^ - 문자열
  • [+-]?의 시작 - 옵션,210 또는
  • [0-9]+- - 1 이상의 숫자
  • (?:,[0-9]+)* - 0 개 이상의 서열 :
    • , - 콤마
    • [0-9]+ - 1 이상의 숫자
  • (?:[.][0-9]+)? - 선택적 시퀀스 :
    • [.] - 점
    • [0-9]+ - 1+ 자리
  • $ - 문자열

더 제한적인 정규 표현식의 끝은 3 자리 그룹에서이

^[+-]?[0-9]{1,3}(?:,[0-9]{3})*(?:[.][0-9]+)?$ 
      ^^^^^   ^^^ 
모양을 수 있도록

그리고 1000 단위 구분 기호로 전체 부분을 일치 시키려면 :

여기
^[+-]?(?:[0-9]{1,3}(?:,[0-9]{3})*|[0-9]+)(?:[.][0-9]+)?$ 
+1

고마워, 내 요구 사항에 따라 완벽하게 작동합니다. – Suniel

2

무엇 하나 이것에 대해 :

^[+-]?\d+(,\d+)?(\.\d+)?$ 

당신은 here 작업 볼 수 있습니다.

+0

둘 이상의 쉼표로 작동하지 않습니다. 그러나 그 아이디어에 감사드립니다. – Suniel

+1

@Suniel, 요구 사항이나 테스트에서 요구하지 않았다는 것을 알았습니까? 어쨌든'(, \ d +)? '를'(, \ d +) *'로 변경하면 예상대로 작동 할 것입니다. –

+0

실제로 나는 *를 추가했지만 잘못된 장소에 있습니다. 내 실수. 당신 덕분에. – Suniel

2

쉼표 사이에만 3 자리 수 있습니다 내 솔루션입니다 :

^[+-]?\d{1,3}(?:,\d{3}|\d+)*(?:\.\d+)?$ 

설명 :

^   : start of string 
[+-]?  : optional + or - 
\d{1,3}  : 1 to 3 digits (before the first optional comma) 
(?:   : non capturing group 
    ,\d{3} : a comma followed by 3 digit 
    |   : OR 
    \d+  : 1 or more digits 
)*   : group present 0 or more times 
(?:   : non capturing group 
    \.\d+  : decimal dot followed by 1 or more digits 
)?   : optional 
$   : end of string 
+0

하나 이상의 쉼표로 작동하지 않습니다. 멋진 설명과 함께 당신의 아이디어에 감사드립니다. – Suniel

+1

@Suniel :'?'를'*'로 변경하십시오. 편집을 참조하십시오. – Toto