我从 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
。
最佳答案
您的表达可以分解成多个部分以便更好地解释。假设你使用
int digitsBeforeZero=3;
int digitsAfterZero=2;
正如你所建议的,我们有这样的表达方式:
"[0-9]{0,2}+((\\.[0-9]{0,1})?)||(\\.)?"
第一部分你有一个可以是任何数字的符号,括号内的部分是一个量词,它告诉你前面的符号有多少是允许的,这种情况下它将接受 0、1 或 2 位数字,加号是也是一个代表“一个或多个”的量词,但由于它前面没有符号,所以不需要它,只会掩盖表达。在括号内您会找到一个组,它用于匹配和检索表达式中的特定匹配项您可以阅读有关组的更多信息 here .嵌套括号内的表达式将接受“.”。字符后跟 1 或 0 数字和括号外的问号表示它前面的表达式可以在也可以不在要匹配的字符串中。最后是'||'是一个逻辑“或”,意味着它也将匹配它后面的表达式。该表达式将接受 '.'它可以存在也可以不存在('?' 量词)所以它也匹配一个空字符串。
如果您只想将 xxxx.yyyy 之类的字符串与 n 'x' 和 m 'y' 匹配,这是一个更好的方法:
"[0-9]{0,"+n+"}(\\.[0-9]{0,"+m+"})?"
更清楚的是,它也将匹配一个空字符串,即单个“.”。但是它也会匹配像“333”这样的字符串。和“.33”,所以你必须根据你的需要调整它。
关于java - Android - 将编辑文本格式化为 xxx.xx 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577174/