我有一个要求,在文本字段中第一个字符应该是字母数字,然后我可以在JavaScript中允许连字符.最后也不应该允许连字符
如果您不想在彼此之后匹配多个破折号:
^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$
这将匹配:a
,a-a
,aaa-a
,aaa-a-aaa-a-aaa-a
,等
但不:-
,-a
,a-
,a--a
,a-a-a-
,a-a--a
,等.
^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]$
这是POSIX + look-akead变体:
^[[:alnum:]](?:[[:alnum:]-](?!-$))*$
这也只允许一个角色作为匹配.但它不是那么可读.;-)
请注意,这[[:alnum:]]
是一个速记预定义的字符类,相当于[a-zA-Z0-9]
更高效,但可以互换.并非每个正则表达式都知道这些POSIX类,如果您愿意,可以使用传统形式.
这是一个不允许多个连续连字符的连字符,它更短:
^(?:[[:alnum:]]+(?:-(?!$))?)+$
它是非POSIX形式:
^(?:[a-zA-Z0-9]+(?:-(?!$))?)+$
我建议:
^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$
这也匹配长度为1的字符串.