통화, 플로트 또는 정수를 검증하는 C# 정규 표현식은 무엇입니까?
문제
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.