나는 0에서 999,999,999,999.99 사이의 숫자를 허용하는 정규식을 작성했습니다. 쉼표는 선택 사항이지만 999999999999.99까지의 값은 계속 허용됩니다. 하나를 썼는데 두 가지 결함이 있었습니다.
(^[1-9][0-9,]{0,14}(\.[0-9]{1,2})?$)
- 0을 받아들입니다. 따라서 0, 0.00은 유효하지만 00이나 00.00은 유효하지 않습니다.
- 쉼표 없이 999,999,999,999.99를 초과하는 값은 허용되지 않습니다.
어떻게 해야 하나요? 나는 그것을 테스트하기 위해 regex101.com pcre(php)를 사용하고 있습니다.
답변1
테스트 파일 내용:
start cmd:> cat file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
9999999999999.99
0
0.00
00
00.00
grep -E '^(0|0\.[0-9]{1,2}|'\
'[1-9][0-9]{0,2}(,?[0-9][0-9][0-9]){0,3}(\.[0-9]{1,2})?|'\
'[1-9][0-9]{0,2}(,[0-9][0-9][0-9])*(\.[0-9]{1,2})?)$' file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
0
0.00
답변2
정규식을 기반으로 숫자 범위의 유효성을 검사하는 것은 나쁜 생각이지만 여전히 정규식보다 낮은 값을 사용하도록 고집하는 경우입니다. 숫자에 쉼표가 있으면 일치하지 않습니다. 이 정규식 일치를 수행하기 전에 쉼표를 제거할 수 있습니다.
^(:?(?=[1])(10{0,11})|(?=[^0])(\d{1,12})|0)\.[0-9]{1,2}$
에서 확인하실 수 있습니다.정규 표현식 101.