正则表达式匹配' - '分隔的字母数字单词

时间:2010-09-24 14:10:09

标签: javascript regex

我想测试用户是否只键入字母数字值或一个“ - ”。

hello-world                 -> Match
hello-first-world           -> match
this-is-my-super-world      -> match
hello--world                -> NO MATCH
hello-world-------this-is   -> NO MATCH
-hello-world                -> NO MATCH (leading dash)
hello-world-                -> NO MATCH (trailing dash)

这是我到目前为止所做的,但我不知道如何实施“ - ”符号来测试它,如果它只是一次而不重复。

var regExp = /^[A-Za-z0-9-]+$/;

4 个答案:

答案 0 :(得分:14)

试试这个:

/^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$/

这将仅匹配由单个-分隔的一个或多个字母数字字符序列。如果您不想允许使用单个字词(例如只需hello),请将*乘数替换为+,以仅允许最后一个组重复一次或多次。

答案 1 :(得分:5)

你去(这是有效的)。

var regExp = /^[A-Za-z0-9]+([-]{1}[A-Za-z0-9]+)+$/;

字母和数字贪婪,单个短划线,重复此组合,以字母和数字结尾。

答案 2 :(得分:2)

(^-)|-{2,}|[^a-zA-Z-]|(-$)查找无效字符,因此与该模式的零匹配将满足您的要求。

答案 3 :(得分:0)

我不完全确定这是否有效,因为我暂时没有使用正则表达式,但听起来你需要以下内容:

/ ^ [A-ZA-Z0-9] +( - [A-ZA-Z0-9] +)+ $ /

您的要求在以下内容中分开:

  • 要启动的一个或多个字母数字字符(这样您始终会有一个字母数字字符。
  • 后半部分需要一个“ - ”后跟一个或多个字母数字字符(但这是可选的,所以整个事情需要0次或更多次)。这样,您将拥有0个或更多短划线实例,后跟1个字母数字。

我只是不确定我是否正确地使用正则表达式来遵循这种格式。