正则表达式允许1-500个字符

时间:2011-10-06 21:04:52

标签: ruby-on-rails ruby regex

# 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而不是短划线并保持上面列出的规则?

由于

3 个答案:

答案 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])?$/
  1. 使整个第二部分可选(括号以?结尾)
  2. 在第二部分中,将中间部分设为可选(使用{0,<number>}构造,但不指定下限)