繁体   English   中英

Ruby Regexp不工作

[英]Ruby Regexp Not Working

应允许以下用户名:

Foo-Bar
Foobar
Fooo_123
Foob123_1
Foo-bar-123

不应允许以下用户名:

_Foobar_
F-o-o-b-a-r
-Foobar-
_-Foobar-_

这意味着:字符串允许长度为3到20个字符。 每三个字符只允许一个短划线或下划线。 不是在开始,不是在结束。 您最多只能使用2个短划线或下划线,最多3个数字,但最少3个字母。

这是我到目前为止所做的Regexp,但是我已经失败了允许前端和后端的破折号:

/^[^\-_][a-zA-Z0-9]{3,20}[^\-_]$/

提前致谢!

对于单个正则表达式来说,这可能太复杂了,如果你可以制作一个,那将是过于难以理解和复杂的。 我建议你只需要多次检查; 例如:

valid = str.length >= 3 && str.length <= 20        # or str.length.between? 3, 20
        && str =~ /^[^-_]+([-_][^-_]{3,})*[-_]?[^-_]+$/
        && str.count '-_' <= 2
        && str.count '0-9' <= 3
        && str.count 'A-Za-z' >= 3

正则表达式的解释:

/
  [^-_]+      # any amount of non-dashes/underscores (so it can't start with one)
  (
    [-_]      # a dash/underscore
    [^-_]{3,} # 3 or more non-dashes/underscores
  )
  *           # zero or more times
  [-_]?       # an optional dash/underscore
  [^-_]+      # any amount of non-dashes/underscores (so it can't end with one)
/x

我建议你从/^(?![-_])[-_a-zA-Z0-9]{3,20}(?<![-_])$/ ,这将允许你所有的确定-usernames只有一个不好(详见rubular )。 然后继续Doorknob建议并对频率施加限制 - 并使用_,......

如何 - 和_在开始和结束被抑制?

  • (?![-_])确保下一个字符既不是 - 也不是_
  • (?<![-_]) - _ (?<![-_])确保前一个字符既不是_也不_

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM