정규 표현식이 입력에서 0을 허용하도록 하려면 어떻게 해야 합니까?

정규 표현식이 입력에서 0을 허용하도록 하려면 어떻게 해야 합니까?

나는 0에서 999,999,999,999.99 사이의 숫자를 허용하는 정규식을 작성했습니다. 쉼표는 선택 사항이지만 999999999999.99까지의 값은 계속 허용됩니다. 하나를 썼는데 두 가지 결함이 있었습니다.

(^[1-9][0-9,]{0,14}(\.[0-9]{1,2})?$)
  1. 0을 받아들입니다. 따라서 0, 0.00은 유효하지만 00이나 00.00은 유효하지 않습니다.
  2. 쉼표 없이 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.

관련 정보