我从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
。
答案 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位数,因此它不允许您输入小数点(.
)..