【发布时间】:2015-08-11 06:07:32
【问题描述】:
所以我坚持要正确使用这个正则表达式......这里是规则:
- 必须以字母开头。
- 它只能包含字母、数字、连字符和下划线。
- 必须以字母或数字结尾。
我已经走到这一步了:
/\A^[A-Z]+[A-Z0-9\-_]*[A-Z0-9]$\z/i
这似乎可行,但不允许使用单个字母。所以a 会返回 false。
【问题讨论】:
标签: regex
所以我坚持要正确使用这个正则表达式......这里是规则:
我已经走到这一步了:
/\A^[A-Z]+[A-Z0-9\-_]*[A-Z0-9]$\z/i
这似乎可行,但不允许使用单个字母。所以a 会返回 false。
【问题讨论】:
标签: regex
您可以使用这个基于前瞻的正则表达式来允许单个字符输入:
/^(?=.*?[A-Z0-9]$)[A-Z][\w-]*$/mgi
(?=.*?[A-Z0-9]$) 将强制执行字符串必须以字母或数字结尾的规则。
【讨论】:
(?=.*?[A-Z0-9]$),它表示只有在结束锚$ 之前有一个字母或数字时才匹配。
由于[A-Z]+ 和[A-Z0-9]$.. ,您的正则表达式至少需要两个字母。
使用以下内容:
\A^[A-Z](?:[A-Z0-9\-_]*[A-Z0-9])?$\z
^^^ ^
见DEMO
解释:
+ 不是必需的,因为它被 [A-Z0-9\-_]* 覆盖
?)包含在一个字符中,但对于多个字符是强制性的..【讨论】:
我会选择这样的替代方案:
^([A-Za-z]|[A-Za-z][\w-]*[A-Za-z0-9])$
第一个替代词是单个字母,第二个是字母后跟字母或数字或连字符 0 到无限次并以字母或数字结尾。括号构成一个捕获组,并强制替代在行的开始和结束之间 (^$)
【讨论】: