只含字母数字、连字符和下划线且没有空格的正则表达式

13

我希望有一个正则表达式,检查字符串是否包含字母数字、连字符和下划线,除此之外不应有空格或其他特殊字符。我的字符串将符合以下两种模式之一:

  • XYZ0123_123456
  • ABCdefGHI-727

我已经尝试了这个表达式,但没有成功:[[a-zA-Z0-9_-]*]


2
这被标记为重复,但请注意,重复标签指向一个JavaScript答案,而OP正在寻求Java的答案。 - Omkar Neogi
在所有的正则表达式语言中都是一样的。 - Wiktor Stribiżew
2个回答

26

工作中
这是一个快速解决方案。

String regex = "^[a-zA-Z0-9_-]*$";
sampleString.matches(regex);
  • (^)锚点表示字符串的开头

  • ($)锚点表示字符串的结尾

  • A-Z、a-z表示字符范围

  • 0-9表示数字范围

  • (_)表示下划线

  • (-)表示连字符


2
它与@ThomasAyoub的答案有何不同? - Toto
Gautam尝试实现[[a-zA-Z0-9_-]*]表达式,我刚刚发布了一个详细的答案,并添加了代码,我认为这可以帮助初学者。 - abubaker
2
如果我想要接受空格,怎么办? - Parag Kadam
1
完美运行 @abubaker - Gaurav
@Gaurav 祝你愉快 :) - abubaker

8
您可以使用^[\w-]*$,其中\w表示:
  • 任何在范围内的字母a-zA-Z,
  • 来自0到9的任何数字,
  • 下划线

您犯的错误是将正确的正则表达式([a-zA-Z0-9_-]* == [\w-]*)封装在字符类中,失去了量词(*)的含义。

我应该在正则表达式中也包含 ^ 和 $ 吗? - Gautam R
@GautamR ^$ 是锚点。它们分别表示字符串的开头 (^) 和结尾 ($)。如果您希望您的字符串仅由字母数字、下划线和连字符组成,那么是的,请将其包含在内 :) - Thomas Ayoub
运行成功!!!谢谢 :) - Gautam R
它对于 ABCdefGHI-727 运行良好,但在 XYZ0123_123456 上失败了。我们有什么遗漏的吗? - Gautam R
1
@GautamR 不可能正则表达式不匹配 XYZ0123_123456。错误来自其周围的代码,请编辑您的问题 :) - Thomas Ayoub
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接