통화, 플로트 또는 정수를 검증하는 C# 정규 표현식은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/617826

  •  03-07-2019
  •  | 
  •  

문제

C#에 적합한 정규식은 다음과 일치하면 숫자를 검증 할 수 있습니까?

 $1,000,000.150
 $10000000.199
 $10000 
 1,000,000.150
 100000.123
 10000

아니면 부정적인 등가물?

도움이 되었습니까?

해결책

약간의 수정을하면 CSMBA의 Regex를 사용할 수 있습니다.

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

다른 팁

SSG가 옳다고 생각합니다. 특히 소프트웨어가 중심이 아닌 데이터 입력을 처리 해야하는 경우 Regex를 잘 사용하는 것은 아닙니다.

예를 들어, 통화 기호가 유로, 또는 일본 엔 또는 영국인 파운드 인 경우 다른 수십 개의 통화 기호 중 하나 인 경우?

숫자 서식 규칙은 어떻습니까?

미국에서는 입장 할 것입니다 1,000,000.00 그러나 프랑스에서는 이것이 그럴 것입니다 1.000.000,00. 다른 국가는 숫자 그룹 사이의 간격을 허용합니다 ...

문화를 고려하지 않고 스트레이트 리그를 사용하는 경우 소프트웨어가 비 중심적 인 맥락에서 절대 사용되지 않을 것이라고 확신하지 않는 한 성공적으로 검증되지 않을 것입니다.

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

SSG의 솔루션 (또는 아마도 MS 버그)에 문제가 있다고 생각합니다.

이것을 실행 :

float.TryParse("0,2",NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"), out num)

진실을 반환합니다. 확실히 "0,2"는 유효한 통화 값이 아닌가?

부유물에주의하십시오. 결국 0.01과 같은 경우 0.0099999로 표시됩니다. 문자열 또는 정수는 사용하는 것이 좋습니다.

이거 한번 해봐. 단일 소수점 만 허용하려면 약간의 미세 조정이 필요할 수 있지만 테스트 사례와 일치합니다. 이게 도움이 되길 바란다.

[$\d,.]+

미국 통화 $ ( d)* d 에이 정규 표현식을 사용하십시오 $ 300, $ 12900 비 일치 $ 12900.00.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top