正则表达式仅允许使用数字,字母,空格和连字符 - Java

正则表达式仅允许使用数字,字母,空格和连字符 - Java

问题描述:

需要允许用户只输入数字或字母或空格或连字符或上述任意组合。正则表达式仅允许使用数字,字母,空格和连字符 - Java

和我尝试以下

String regex = "/^[0-9A-Za-z\s\-]+$/"; 
sampleString.matches(regex); 

,但它不能正常工作。请有人帮我解决请。

+3

Java不使用'/ regex/flags'语法。删除''/''。 – Pshemo

问题:你的正则表达式试图在开始和结束时

在java中有前后正则表达式所以用不用的/java!=javascript

"^[0-9A-Za-z\\s-]+$" 

^[0-9A-Za-z\\s-]+$匹配/符号: ^开始比赛

[0-9A-Za-z\\s-]+:一个或多个字母,数字,空格和-

$:比赛

+0

感谢您的答案,顺便说一句,我没有投票你的答案:)我从来没有这样做过。 – SAR

+0

@SAR我很高兴,我可以帮助,我永远不会这么做:) –

+0

sidenote:请注意回答和评论之间的时间范围 –

您是接近,但需要做出两个改变的结束。 第一个是双逃逸(即使用\\而不是\)。这是由于Java的怪异(请参见Javadoc for the Pattern class中的“反斜杠,转义和引用”一节)。第二件事是删除显式引用到字符串的开始和结尾。这在使用matches()时会被隐含。所以,正确的Java代码

String regex = "[0-9A-Za-z\\s\\-]+"; 
sampleString.matches(regex); 

虽然这会工作,你也可以替换\ d的“0-9”的参考和下降的转义“ - ”。这给你

String regex = "[\\dA-Za-z\\s-]+"; 
+1

不是downvoter,但没有必要逃避' - ',尝试它,但如果你downvoted,因为downvoter认为这是一个错字,那么请原谅我说它是由符号构成的正则表达式,很多帖子只会是拼写错误 –

+0

你是对的。我打字速度很快,并将我的答案基于原始海报的正则表达式。我的坏:)对于这个问题,如果清理,那么0-9可以被\\ d替换。 –

+1

你可以随时编辑你的答案,继续 –