2014-12-18 1 views
5
^((?=.*[1-9]|0)(?:\d{1,3}))((?=.*\d)(?:\.\d{3})?)*((?=.*\d)(?:\,\d\d){1}?){0,1}$ 

사실이 정규 표현식은 매우 길고 짧을 수도 있습니다. 문제는 정규 표현식에별로 좋지 않으므로 도움을 청합니다.통화 번호에 대한 정규식, 어떻게 쓸 수 있습니까?

온라인 정규 표현식 테스터 http://regexr.com/3a3mk

내 규칙 :

  • 많은으로 추가 1, 2 또는 3 양수 [1-9] 또는 0
  • 시작. (3 개의 숫자 [0-9]가 뒤 따른다).
  • 가능성

포지티브

  • 0
  • 0.55
  • 1
  • 1,60
  • 10 결과 (십진수로) 2 개 숫자 쉼표를 추가
  • 10,70
  • 100.000,08
  • 1.000 10.000,03
  • 100.000 10.000
  • 1.000,20
  • 1.000
  • 100,80
  • 1,10-
  • 100
  • 51,515,. 000.000
  • 1000.000.00010,853,210

음성 결과

  • 0,0
  • 1,1-
  • 1000
  • 1000.000
  • 0.000
  • 0.000,10
  • ,10
  • 012
  • 01
  • 1.000,0
  • 1.00,00
  • 1.0,1.000,1
  • 1.000,100.123,10
  • A0
  • 0하는
  • 0 AA
  • 1.a00.00
  • 1.000.a1

[편집] 더 부정적인 결과가 추가되었습니다.

+4

사이드 참고 :이 정규식에 대한 질문과 같아야 방법이다. –

답변

2

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

Regular expression visualization

시각화 데모

Debuggex로를

일치 : 라인

^ 처음 0과 2 자리

기간의

(\.[0-9]{3})* 0 이상의 많은 3 자릿수

[1-9] 한 비제 자리

[0-9]{0,2}

(0 | [1-9][0-9]{0,2}(\.[0-9]{3})*)은 (i) 0 또는 (ii) 최대 세 자리 (0이 아닌 첫 번째 숫자), 0 개 이상의 로트와 3 자리 숫자의 블록이 뒤 따르는 것

0 또는 하나의 쉼표 및 2 자리 라인의

$

+1

그의 첫 두 긍정적 인 예를 포함하지 않습니다 : 0과 0,55 – Mainz007

+0

@ Mainz007. 좋은 지적. 바라기를 바래. – Tony

+0

예 : downvote;을 제거했습니다. – Mainz007

1

당신의 표현이 약간 길다는 것이 맞을 것입니다. 예 번호와 사양 작동하는 짧은 버전이 될 것이라고했다 :

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

설명 : 0 또는 1 ~ 3 자리에 대한

  • (\.\d{3})* 검사에 대한

    • (0|\d{1,3}) 확인 도트와 3 개의 숫자로 이루어 지지만, * 때문에 아무 것도 없을 수도 있습니다.
    • (,\d{2})? 쉼표와 두 자리 숫자는 ckecks이며, 그러나 다시 한 번 나타날 수도 있고 전혀 나타나지 않을 수도 있습니다.

    희망이 있습니다.

  • +2

    정규식이 '000,55'와 일치하고 있습니다. OP가 찾고있는 것이 맞는지 확실하지 않습니다 ... – sp00m

    +0

    고맙습니다.이게 속임수입니다. 하지만 단지 긍정적 인 결과가 부정 (내 버전에서도)이 발견되면 012/012,12가 허용됩니다 (0으로 시작하는 것은 허용되지 않습니다). 그래서 나는 그가 커버 한 것을 가지고 @ sp00m의 답을 얻었습니다! 아직도 엄지 손가락! – Marcel

    +0

    예, 놓친 것 ... – Mainz007

    8

    당신의 요구에 맞게해야 다음

    ^(0|[1-9][0-9]{0,2}(\.[0-9]{3})*)(,[0-9]{2})?$ : 편집 regex101

    +1

    비록 당신의 표지도 a23,23이지만 숫자 만 확인합니다. – Mainz007

    +1

    @ Mainz007 잘 잡으세요! 내가 업데이트, 감사합니다 :) – sp00m

    +1

    BTW : Debuggex 보여주는 주셔서 감사합니다) – Mainz007

    관련 문제