货币格式的正则表达式 - java
Regex for currency formatting - java
我想将过滤器添加到我的 EditText
中,接受不同的货币值,例如
美国货币格式:123,456.00
西班牙货币格式:123.456,00
此外,我想保留小数点前最多 10 位和小数点后最多 2 位。
我用于过滤 EditText 值的正则表达式是 (([0-9|(,.)]{0,13})?)?((,.)[0-9]{0,2})?
但是这个正则表达式接受像 ,,,,,,,
或 .......
这样的值
如何更改严格接受具有相同模式的两种货币格式的正则表达式?
感谢任何帮助。先感谢您。
您的模式只能匹配重复的点或重复的逗号,因为由于问号,所有部分都是可选的。它也可以匹配一个空字符串。
您可以将 alternation 与以点或逗号开头后跟 3 或 2 位数字的重复组一起使用,以防止出现连续的点和逗号:
说明
^(?:(?![,0-9]{14})\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?|(?![.0-9]{14})\d{1,3}(?:\.\d{3})*(?:\,\d{1,2})?)$
^
字符串开头
(?:
非捕获组
(?![,0-9]{14})
否定前瞻,断言逗号或数字不重复 14 次
\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?
匹配 1-3 位数字,重复 0+ 次匹配逗号后跟 3 位数字,可选择匹配点和 1-2 位数字
|
或
(?![.0-9]{14})
否定前瞻,断言一个点或数字不重复 12 次
\d{1,3}(?:\.\d{3})*(?:\,\d{1,2})?
匹配 1-3 个数字,重复 0+ 次匹配一个点后跟 3 个数字,可选择匹配一个逗号和 1-2 个数字
)
关闭非捕获组
$
断言字符串结束
NumberFormat's getCurrencyInstance 方法有一个 Locale 参数。这是处理格式化货币问题的标准方法。
我想将过滤器添加到我的 EditText
中,接受不同的货币值,例如
美国货币格式:123,456.00
西班牙货币格式:123.456,00
此外,我想保留小数点前最多 10 位和小数点后最多 2 位。
我用于过滤 EditText 值的正则表达式是 (([0-9|(,.)]{0,13})?)?((,.)[0-9]{0,2})?
但是这个正则表达式接受像 ,,,,,,,
或 .......
如何更改严格接受具有相同模式的两种货币格式的正则表达式?
感谢任何帮助。先感谢您。
您的模式只能匹配重复的点或重复的逗号,因为由于问号,所有部分都是可选的。它也可以匹配一个空字符串。
您可以将 alternation 与以点或逗号开头后跟 3 或 2 位数字的重复组一起使用,以防止出现连续的点和逗号:
说明
^(?:(?![,0-9]{14})\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?|(?![.0-9]{14})\d{1,3}(?:\.\d{3})*(?:\,\d{1,2})?)$
^
字符串开头(?:
非捕获组(?![,0-9]{14})
否定前瞻,断言逗号或数字不重复 14 次\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?
匹配 1-3 位数字,重复 0+ 次匹配逗号后跟 3 位数字,可选择匹配点和 1-2 位数字|
或(?![.0-9]{14})
否定前瞻,断言一个点或数字不重复 12 次\d{1,3}(?:\.\d{3})*(?:\,\d{1,2})?
匹配 1-3 个数字,重复 0+ 次匹配一个点后跟 3 个数字,可选择匹配一个逗号和 1-2 个数字
)
关闭非捕获组$
断言字符串结束
NumberFormat's getCurrencyInstance 方法有一个 Locale 参数。这是处理格式化货币问题的标准方法。