Android - Regex将edittext格式化为xxx.xx

时间:2013-07-10 17:31:33

标签: java android regex

我从Limit Decimal Places in Android EditText获取了一些代码。

正则表达式如下所示。我使用“3”作为digitsBeforeZero和“2”作为digitsAfterZero

mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?"); 

xxx 外,它适用于所有情况。当我尝试输入数字“ xxx.xx ”时,它不允许我在“ xxx 点(。)” >”

请帮助我理解Regex

2 个答案:

答案 0 :(得分:1)

您的表达式可以分解为更好的解释部分。假设你使用

int digitsBeforeZero=3;
int digitsAfterZero=2; 

如你所说,我们有表达式:

"[0-9]{0,2}+((\\.[0-9]{0,1})?)||(\\.)?"

第一部分你有一个可以是任何数字的符号,括号内的部分是一个量词,它告诉前一个符号有多少是允许的,这种情况下它会接受0,1或2位数,加号是也是一个代表“一个或多个”的量词,但由于在它之前没有符号,因此不需要它,只是模糊了表达式。在括号内,您将找到一个组,用于匹配和检索表达式中的特定匹配项,您可以在组here上阅读更多内容。嵌套括号内的表达式将接受'。'字符后跟1或0位数字,括号外的问号表示前面的表达式可以是或不在要匹配的字符串中。最后'||'是一个逻辑'或'意味着它也将匹配它后面的表达式。那个表达式会接受一个'。'它可以存在或不存在('?'量词)所以它也匹配一个空字符串。

如果您想要的只是匹配像xxxx.yyyy这样的字符串与'x'和m'y',这是一个更好的方法:

"[0-9]{0,"+n+"}(\\.[0-9]{0,"+m+"})?"

更清楚的是,它将匹配一个空字符串,一个'。'但它也会匹配像“333”这样的字符串。和“.33”所以你必须根据自己的需要调整它。

答案 1 :(得分:0)

从两个表达式中删除-1 ..

使用上面的表达式,您实际上尝试匹配小数点前的0到2位数和输入3,2的小数点后0到1位数,因此它不允许您输入小数点(.)..