正则表达式与某些数字不匹配

时间:2017-04-25 13:33:36

标签: java regex vaadin

我有这个正则表达式:^(\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,.]+$

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您需要验证多行TextField的内容,并希望接受由{{1}的一行或多行非空序列组成的内容分离的浮点数和整数。

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

如果然后使用以下.

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+)?)*"); 的{​​{1}}参数。

正则表达式可以说可以减少到complete,但是会停止表示RegexpValidator之间的差异,\d+([.,\n]\d+)*是数字之间的分隔符,.是数字的一部分。它在运行时对于验证器来说并不重要,但可能会给维护代码的人带来困惑,如果您以后想要匹配不同的数字,则无法轻易地重复使用。