我实现了EditText
,它允许输入以空格分隔的价格。
价格可以是整数和十进制值。
例如:
3900 156.2 140.38 200 10
因此,我发现了以下正则表达式:
(\d+([.]\d{1,2})? )+
但是它只能在末尾使用空格。 (我知道这绝对是可以预期的)
是否可以使此正则表达式忽略输入字符串末尾的空格?
或者您可以提出其他建议吗?
谢谢。
答案 0 :(得分:3)
我建议采用以下模式:
^\d+(?:\.\d+)?(?:\s+\d+(?:\.\d+)?)*$
简而言之,这表示要匹配一个(可能)十进制数字,然后匹配一个或多个空格字符,以及另一个(可能)十进制数字,该零次或多次出现。
看看下面的演示链接。
但是,由于您使用的是Java,因此我可以在此处建议其他方法。由于您可能必须访问每个数字,因此您可以将EditText
来的字符串按空格分开,然后检查每个“数字”以确保它确实是一个数字。像这样:
String input = "3900 156.2 140.38 200 10";
String[] nums = input.split("\\s+");
for (String num : nums) {
if (num.matches("\\d+(?:\\.\\d+)?")) {
// then process this as a number
}
}
答案 1 :(得分:0)
您还可以(几乎)使用您提供的相同模式:
(\d+([.]\d{1,2})? )*(\d+([.]\d{1,2})?)
这没有蒂姆的答案灵活(例如:如果在数字之间放置一个以上的空格,它将失败,等等),但是反正还是有用的。