2017-04-25 93 views
0

我有这样的正则表达式匹配:^(\d*.?\d*)$所有数字,但有些数字不能匹配这个表达式正则表达式与某些数字

一些例子:

54139 // work 
24.711 // won't work, not a float but dot is the separator 
0 // won't work 
60 // won't work 

我用这个表达式中RegexValidator。我确认一个文本框:

TextField textField = new TextField(caption); 
textField.setValue(value); 
textField.addValidator(new StringLengthValidator(value + " ...",10, 50, true)); 
textField.addValidator(new RegexpValidator("^(\\d*.?\\d*)$", value + " ...")); 

我与另一个正则表达式试了一下:^[0-9,.]+$

+2

用斜线将点击...'\ .'! –

+0

你是什么意思'不是一个浮点数,但点是分隔符?它应该被解析为两个独立的整数吗? – Aaron

+0

@亚伦,数字不是十进制数字。点是分隔符 – emoleumassi

回答

0

如果我明白你的问题正确,你就验证了多线TextField的内容和想接受内容由一行或多行非空序列的.分隔的浮点数和整数组成。

此声明可以简化如下:您希望匹配由.或换行符分隔的数字序列,其中数字可以包含小数部分。

如果然后将使用以下RegexpValidator

new RegexpValidator("\\d+(,\\d+)?([.\\n]\\d+(,\\d+)?)*", true, value + "...") 

在该正则表达式,一个数表示为\\d+(,\\d+)?,它代表一个强制整数部分,接着用其逗号分隔符可选的小数部分。

全局正则表达式接受一个数字,例如上面定义的数字,然后是一个(可能是空的)其他数字序列,前面是一个接受的分隔符,即.或一个换行符。

我验证了我的答案与下面的表达式返回true

"54139\n12.5\n1,2.5,3\n12,5".matches("\\d+(,\\d+)?([.\\n]\\d+(,\\d+)?)*"); 

请注意,我删除您使用的锚和使用RegexpValidatorcomplete参数来代替。

该正则表达式可以被减少到\d+([.,\n]\d+)*,但会停止表示作为数字一部分的,之间的分隔符.之间的差异。在验证程序的运行时间中,这并不重要,但可能会给维护代码的人带来混淆,如果稍后想要匹配不同的数字,则不易重用。