确定String中是否只有一组已定义的字符

时间:2013-12-06 14:32:41

标签: java regex

我在字符串中有一个金额,我想检查是否还有其他数据,点和逗号。因此,如果存在除[0123456789,.]之外的任何其他内容,则应返回false。

我目前正在检查:

if ("495.6A,B76".matches(".*[0123456789].*")) {

返回true,因为字符确实在字符串中。我只想检查字符串是否只包含这些字符?

5 个答案:

答案 0 :(得分:4)

您可以匹配已知符号:

^[\\d,.]+$

视觉表现:

Regular expression visualization

PS:请注意,如果您使用的是String#matches,则不需要锚点^ and $(行开头和行结束),因为这些是隐含的。

因此:

"495.6A,B76".matches("^[\\d,.]+$");

与:

相同
"495.6A,B76".matches("[\\d,.]+");

都会返回false。

答案 1 :(得分:3)

String regex = "^[0-9,.]+$"

^说“以”开头“ +表示前面的一个或多个(如果空字符串匹配,请使用*
$说“以...结尾” [0-9] == [0123456789];另外,[0-9] == [\\d]

因为每个人都喜欢图片,所以你走了:
Regular expression visualization

编辑:
未发现您使用的是.matches(),这会自动匹配整个字符串,因此您可以移除^和{{ 1}}锚。

答案 2 :(得分:1)

您可以使用字符类[]

包含要匹配的特定字符
^[0-9,.]+$

正则表达式:

^              the beginning of the string
 [0-9,.]+      any character of: '0' to '9', ',', '.' (1 or more times)
$              before an optional \n, and the end of the string

答案 3 :(得分:1)

if (param.matches ("[0-9.]+"))  
System.out.println ("matches" );    
else      
System.out.println ("doesn't match");  

答案 4 :(得分:0)

如果你有一小组定义的字符,你可以使用否定运算符,如下所示:

[^\d,\.,]

这将匹配任何非数字字符。

另一种方法是查看整个字符串是否只是您想要的数字:

^[\d\.,]$

你可能想要的是更具体的东西,这是一种货币形式(两位小数),如下所示:

\d+\.\d\d