RegEx允许在开始时使用字母数字,然后使用连字符

时间:2009-01-20 07:55:48

标签: regex

我有一个要求,在文本字段中第一个字符应该是字母数字 然后我可以在JavaScript中允许连字符。也不应该在结尾处使用连字符

4 个答案:

答案 0 :(得分:14)

如果您不希望彼此匹配多个破折号:

^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$

这将匹配:aa-aaaa-aaaa-a-aaa-a-aaa-a等 但不是:--aa-a--aa-a-a-a-a--a等。

答案 1 :(得分:8)

^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]$

答案 2 :(得分:5)

以下是POSIX + look-akead变体:

^[[:alnum:]](?:[[:alnum:]-](?!-$))*$

这也只允许一个角色作为匹配。但它不是那么可读。 ; - )

请注意,[[:alnum:]]是一个等同于[a-zA-Z0-9]的简写预定义字符类,效率更高,但可以互换。并非每个正则表达式都知道这些POSIX类,如果你愿意,可以使用传统形式。

这是一个不允许多个连续连字符的连字符,它更短:

^(?:[[:alnum:]]+(?:-(?!$))?)+$

并且它是非POSIX形式:

^(?:[a-zA-Z0-9]+(?:-(?!$))?)+$

答案 3 :(得分:5)

我建议:

^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$

这也匹配长度为1的字符串。