繁体   English   中英

Android-正则表达式将编辑文本格式化为xxx.xx

[英]Android - Regex to format the edittext as xxx.xx

我从Android EditText的Limit Decimal Places中提取了一些代码。

正则表达式如下。 我已经使用“ 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位数字,加号也是一个量词代表“一个或多个”,但是因为它前面没有符号,所以不需要它,只会使表达式模糊。 在括号内,您会找到一个组,该组用于匹配和检索表达式中的特定匹配项,您可以在此处阅读有关组的更多信息 嵌套括号内的表达式将接受“。”。 字符后跟1或0位数字,并且圆括号外的问号表示它前面的表达式可以在字符串中,也可以不在字符串中。 最后是“ ||” 是逻辑“或”,表示它也将匹配其后的表达式。 该表达式将接受“。”。 并且它可以存在或不存在(“?”量词),因此它也匹配一个空字符串。

如果您只想将xxxx.yyyy之类的字符串与n'x'和m'y'匹配,则这是一个更好的方法:

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

更清楚的是,它也将匹配一个空字符串,即单个“。”。 但是,它也将匹配“ 333”之类的字符串。 和“ .33”,因此您必须根据需要进行调整。

从两个表达式中删除-1

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM