这就是我一直在使用的
\$?[0-9]+\.*[0-9]*
Run Code Online (Sandbox Code Playgroud)
但是当我做一些测试时,我发现了类似的东西
$$$34.00
Run Code Online (Sandbox Code Playgroud)
将作为匹配matcher.group()返回(但)只返回匹配的子字符串.如果用户输入多个美元符号,我不希望它甚至传递正则表达式,所以我尝试了这个:
\${1}[0-9]+\.*[0-9]*
Run Code Online (Sandbox Code Playgroud)
但这似乎与我第一次输入的正则表达式相同.现在我正在java中测试它,但是,我打算使用Boost库在c ++中使用它.但请不要在这里给我解决方案,因为我试图在没有人给我答案的情况下学习.
但我确实需要帮助,所以用户只能输入一个美元符号(这是我认为\${1}会做的)
anu*_*ava 18
我建议避免使用正则表达式进行货币解析,尤其是当Java为您提供更简单的方法来解决此问题时.
考虑以下代码:
String str = "$789.11"; // user entered value
Number number = null;
try {
number = NumberFormat.getCurrencyInstance(Locale.US).parse(str);
} catch(ParseException pe) {
// ignore
}
if (number != null) {
// proceed as user entered a good value
}
else {
// user didn't enter a good value
}
Run Code Online (Sandbox Code Playgroud)
Syo*_*yon 12
既然你这样做是为了学习正则表达式......
^\$(([1-9]\d{0,2}(,\d{3})*)|(([1-9]\d*)?\d))(\.\d\d)?$
分解:
^\$ $ $单个美元符号的字符串开头
([1-9]\d{0,2}(,\d{3})*) 1-3位数,其中第一个数字不是0,后面是0个或更多个逗号,带有3个数字
要么
(([1-9]\d*)?\d) 一个或多个数字,只有当它是唯一的数字时,第一个数字才能为0
(\.\d\d)?$ 在字符串的末尾可选择一个句点和2个数字
火柴:
$4,098.09
$4098.09
$0.35
$0
$380
Run Code Online (Sandbox Code Playgroud)
不匹配:
$098.09
$0.9
$10,98.09
$10,980456
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27295 次 |
| 最近记录: |