正则表达式匹配字符串的一部分,但不匹配整个字符串

Bog*_*dan 0 regex match

这是我用来验证字符串的正则表达式,该字符串可以包含小写和大写字母,数字和短划线:

/([a-zA-Z0-9-])+$/
Run Code Online (Sandbox Code Playgroud)

它有以下结果:

  • abd - 火柴
  • abcd- - 火柴
  • abcd0 - 火柴
  • abcd0- - 火柴
  • abc@ - 不匹配(正确)
  • abc@efg - 匹配(不正确,不应该)

我究竟做错了什么?

Daw*_*žan 5

我会说你需要/^([a-zA-Z0-9-])+$/.您希望匹配整个字符串,而不仅仅是一个部分,但是您缺少字符串开头的标记^.

^$在字符串的开头和结尾之间,([a-zA-Z0-9-])+可以有一个或多个字符a-zA-Z0-9-.

你的正则表达式匹配a-zA-Z0-9-在字符串结尾之前包含一个或多个字符的所有内容,无论之前是什么.

您可以在regex101.com上测试您的正则表达式(非常好的在线工具,用于正则表达式测试,包括解释,参考等).