# A-Z, a-z, 0-9, _ in the middle but never starting or ending in a _
# At least 5, no more than 500 characters
/[A-Za-z\d][-A-Za-z\d]{3,498}[A-Za-z\d]/ }
你好,我有以上几点。我想更新规则以允许1个字符。我尝试将3改为1。
/[A-Za-z\d][-A-Za-z\d]{1,498}[A-Za-z\d]/ }
但这失败了。
我如何允许至少1个字符A-Z,a-z或0-9而不是短划线并保持上面列出的规则?
由于
答案 0 :(得分:9)
您可以使用先行单独对每个规则进行编码来简化操作:
/^(?!_)(?!.*_$)\w{1,500}$/
说明:
(?!_)
:不以下划线开头。(?!.*_$)
:不以下划线结尾。[\w]{1,500}
:包含1到500个允许的字符。一个优点是最小和最大限制(1和500)非常明确且易于更改。稍后在不更改现有代码的情况下添加某些类型的新限制也很容易 - 只需添加另一个检查该规则的前瞻。
以下是在线工作的示例(为清晰起见,更改为1到10个允许的字符,而不是1到500个):
答案 1 :(得分:4)
匹配单个字母数字字符,并可选择匹配0到498个字母数字字符,包括短划线,后跟单个字母数字字符。
/[A-Za-z\d]([-A-Za-z\d]{,498}[A-Za-z\d])?/
更新以允许中间部分_
:
/[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?/
另外,根据您的使用情况,您可能需要使用\A
和\Z
来标记字符串的开头和结尾或字边界(\b
)。 。例如,如果您使用它来匹配(验证)输入字符串,则必须这样做。
请注意,如果您使用Ruby 1.8.7,则必须使用{0,498}
而不是{,498}
。
根据您的其他问题更新以最终解决此问题,您必须添加锚点:
/\A[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?\Z/
答案 2 :(得分:1)
/^[A-Za-z\d]([-A-Za-z\d]{0,498}[A-Za-z\d])?$/
?
结尾){0,<number>}
构造,但不指定下限)