![정규 표현식이 입력에서 0을 허용하도록 하려면 어떻게 해야 합니까?](https://linux55.com/image/34014/%EC%A0%95%EA%B7%9C%20%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%B4%20%EC%9E%85%EB%A0%A5%EC%97%90%EC%84%9C%200%EC%9D%84%20%ED%97%88%EC%9A%A9%ED%95%98%EB%8F%84%EB%A1%9D%20%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 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.