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

Java 正则表达式与某些数字不匹配,java,regex,vaadin,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); textFie

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

如果我正确理解了您的问题,那么您正在验证多行
文本字段的内容,并且希望接受由一行或多行非空的
分隔浮点数和整数序列组成的内容

该语句可以简化如下:您希望匹配由
或换行符分隔的数字序列,其中数字可以包含小数部分

If然后将使用以下
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+)?)*");
请注意,我删除了您使用的锚,并使用了
RegexpValidator
complete
参数


正则表达式可以被简化为
\d+([,\n]\d+*
),但随后将停止表示作为数字分隔符的
和作为数字一部分的
之间的差异。对于验证器来说,这在运行时并不重要,但可能会给维护代码的人员带来混乱,并且如果您以后想要匹配不同的数字,则无法轻松重用。

避开点<代码>\.
带斜杠!你说的不是浮点数而是分隔符是什么意思?它应该被解析为两个独立的整数吗?@Aaron,这个数字不是十进制数。点是分隔符,然后应该发生什么?您希望接受此值、此值的一部分,还是一直拒绝它?因为在我看来,既然有分隔符,它就不仅仅是一个数字,应该被拒绝。@k-five,
*
量词接受0到n次出现