java正则表达式匹配0-9和一些特殊字符

时间:2012-01-11 10:25:53

标签: java regex

我在为电话号码编写正则表达式时遇到了一些麻烦。 (对他们来说还不太好) 该号码可能只包含:0-9,+,/,.,-, ,(,) 我在想:

@Pattern(regexp = "(0-9+/\\.\\- \\(\\))?")

但是当我输入100时,这已经在抱怨。

5 个答案:

答案 0 :(得分:3)

试试这个正则表达式[0-9\.\-\s+\/()]+

但根据你的解释,因此我的正则表达式也允许+++或单个空格或类似的东西,这是你想要的吗?

编辑:所以最好使用以下内容:([\.\-\s+\/()]*[0-9][\.\-\s+\/()]*){8,15}

这需要至少8-15个数字,并允许其他字符出现在它们之间。

答案 1 :(得分:0)

您需要使用方括号创建一个字符类。

[0-9+/. ()-]+

请参阅this expression on Regexr

这意味着匹配类内部的任何字符一次或多次(因为最后的量词+

但是这会匹配任何顺序中的字符,例如“......”会匹配。

你的正则表达式(0-9+/\\.\\- \\(\\))?表现得这样:

匹配“0-”然后是一系列9,然后是“/.-()”。由于在周围括号之后的?,整个模式是可选的,即它也匹配空字符串。

请参阅your expression on Regexr

答案 2 :(得分:0)

我认为你想要"[-0-9+/. ()]+" - 在[]内处理特殊字符的方式不同,处理-的最佳方法是将其放在第一位。

答案 3 :(得分:0)

@Pattern(regexp = "^[0-9+/. ()-]+$")

答案 4 :(得分:0)

正确的模式:^[\d\/\(\)\- \.]+$

通过拆分正则表达式,您可以看到:

^    #Won't match if it doesn't start at the beginning
[    #The character can contain...
\d   #digits
\/   #slash
\(   #brackets (open)
\)   #brackets (close)
\-   #hyphen
     #space (\s is also possible but can be tab too)
\.   #or a dot
]
+   #The character can be repeated
$   #Won't match if it doesn't reach the end