-214748.00
또는 -214748
에서 214748.00
까지의 통화 숫자 범위와 일치하는 정규식을 어떻게 작성합니까?Regex 표현식으로 통화 숫자 범위와 일치
시도했지만 작동하지 않았습니다.
^[-]?[0-9]{1,214748 }(?:\\.[0-9]{2})?$
-214748.00
또는 -214748
에서 214748.00
까지의 통화 숫자 범위와 일치하는 정규식을 어떻게 작성합니까?Regex 표현식으로 통화 숫자 범위와 일치
시도했지만 작동하지 않았습니다.
^[-]?[0-9]{1,214748 }(?:\\.[0-9]{2})?$
노노 노. 작업에 잘못된 도구를 사용하고 있습니다. 정규 표현식은 텍스트 처리 도구 일뿐입니다. 텍스트의 의미를 해석하는 것은 좋지 않습니다. 처리해야 할 텍스트의 의미를 식별 할 때, 정규 표현이 좋지 않은 부분입니다.
이 작업에는 간단한 언어 도구와 연산자를 사용해야합니다. 그 외에도 화폐를 다루는 경우 double
또는 float
을 사용하지 마십시오. 그들은 모든 부동 소수점 수를 정확히 표현하기에는 정밀도가 충분하지 않습니다. 대신 BigDecimal
을 사용하십시오.
경고 :, 지금까지 이러한 문제에 대해이 작업을 사용하지 마십시오 :
참고 :이 부동 소수점 숫자를 처리하지 않습니다.
당신이 너무 많이 주장하고 있기 때문에 테스트 한 일부 입력에 대해 작동하는 정규식을 따라했습니다. 나는 그것이 주어진 범위 내의 값에 대해서 잘 작동 것 같아요
"-?(\\d{1,5}|1\\d{5}|2(?:0\\d{4}|1(?:[0-3]\\d{3}|4(?:[0-6]\\d{2}|7(?:[0-3]\\d|4[0-8])))))"
-?
가 음수에 대한 -
옵션을 의미합니다.
데모 코드 :
String str = "-?(\\d{1,5}|1\\d{5}|2(?:0\\d{4}|1(?:[0-3]\\d{3}|4(?:[0-6]\\d{2}|7(?:[0-3]\\d|4[0-8])))))";
System.out.println("214748".matches(str)); // true
System.out.println("214746".matches(str)); // true
System.out.println("2148".matches(str)); // true
System.out.println("-21448".matches(str)); // true
System.out.println("-214747".matches(str)); // true
System.out.println("214749".matches(str)); // false
정규식은 다음과 같은 사실을 사용합니다.범위 [-214748, 214748]
들어 :
1
로 시작 \\d{1,5}
1\\d{5}
2
시작하는 번호는 :
0
으로 시작하는 숫자는 유효합니다. - 20\\d{4}
2
옆의 숫자가인 경우 [0-3]
로 시작개
4
로 시작하는 더 이상 4 자리 번호를 21[0-3]\\d{3}
[0-6]
로 시작
214[0-6]\d{2}
4
후 자리 인 경우 7
,
[0-3]
으로 시작하는 그 이상의 번호는 유효합니다. -7
는 4
입니다4
후 [0-8]
가 유효 범위 - 21474[0-8]
@Downvoter 치료 의견. –
@ NullUserException. 나는 해결책을 제시하지 않았다. 방금 regex를 사용해서는 안되는 이유를 추가했습니다. 사용법을 알려 줬습니다. 나는 OP가 최소한이 일을 사업자들에게하기를 기대합니다. –
충분합니다. 그러나 나는 닌자 편집 전에 대답을 downvoted – NullUserException
당신이 요구하는지 않는 작업 정규식입니다 :
^-?((([0-9]{1,5}|1[0-9]{5}|2(0[0-9]{4}|1([0-3][0-9]{3}|4([0-6][0-9]{2}|7([0-3][0-9]|4[0-7])))))([.][0-9]{2})?)|214748([.]00)?)$
이 0 214747까지의 범위와 일치하는 다음 하위 정규식에 크게 의존 :
([0-9]{1,5}|1[0-9]{5}|2(0[0-9]{4}|1([0-3][0-9]{3}|4([0-6][0-9]{2}|7([0-3][0-9]|4[0-7])))))
왜 0에서 214,747에하지 0 214,748에를? 이 방법을 사용하면 214748.01에서 214748.99 (+/-)까지 값을 일치시키는 것을 피하는 것이 더 쉽습니다.
^ # match start of line
-? # optional minus sign
(# match one of the following groups, this one:
(
([0-9]{1,5}|1[0-9]{5}|2(0[0-9]{4}|1([0-3][0-9]{3}|4([0-6][0-9]{2}|7([0-3][0-9]|4[0-7])))))
# the sub-regex above matches the range from 0 to 214747
([.][0-9]{2})? # this matches the optional two decimals
)
| # or this one:
214748([.]00)? # 214748, with optional zeroes
)
$ # match end of line
을 그리고 거기 당신은 볼 커녕 유지하는 악몽 지나치게 복잡한 정규식 그것을 가지고 : 정규식을 깨고 우리가 얻을. 범위를 변경해야하는 경우 많은 작업이 필요합니다.
이 괴물이이 작업을 위해 정규 표현식을 사용하지 않기를 바랍니다. 다른 사람들이 말하고 적절한 도구를 사용하여 처리하십시오. 정규식 이 필요한 경우이라고 말하면 끔찍한 생각이며 요구 사항을 수정하도록 요청하십시오.
숫자가있는 경우 왜 정규식을 사용해야합니까? – drobert
내 요구 사항은 숫자를 제한하는 것입니다. 제한을 초과하면 예외를 throw해야합니다. –
이것은 정규식에 대한 작업이 아닙니다. 드라이버로 손톱을 망치겠습니까? 범위 제한이 10의 제곱 수 (즉, -100000 <= x <= 100000) –