iGb*_*nam 8 ruby regex ruby-on-rails ruby-on-rails-3
我已经编写了一段时间但直到最近才开始需要正则表达式.我需要做一个接受用户名的正则表达式,就像Twitter一样.基本上,我想一次允许一个下划线.名称中可以有多个下划线,但这些下划线不应该是连续的字符.也允许使用字母数字字符.但数字不能起名.
名称如
是有效的但是
无效.
我玩过Rubular并想出几个正则表达式:
/^[^0-9\s+](_?[a-z0-9]+_?)+$/i/^([a-z_?])+$/i我遇到的问题是这些匹配多个下划线.
saw*_*awa 10
编辑
a = %w[
_myname67
myname67
my_name
_my_67_name_
94myname
__myname
my__name
my\ name
m_yname
]
p a.select{|name| name =~ /\A_?[a-z]_?(?:[a-z0-9]_?)*\z/i}
# => ["_myname67", "myname67", "my_name", "_my_67_name_", "m_yname"]
Run Code Online (Sandbox Code Playgroud)
您应该( )仅用于要捕获的子字符串.(?: )用于您不想捕获的分组.当您不需要特别引用该子字符串时,最好使用它.它还使正则表达式运行得更快.
尝试以下操作^([a-zA-Z](_?[a-zA-Z0-9]+)*_?|_([a-zA-Z0-9]+_?)*)$
我区分了两种情况:单词以字母开头,以下划线开头。如果您不想允许名称由一个符号组成,只需将 替换*为+。
maerics 的解决方案有一个问题,它没有捕获_第二位的名称,例如m_yname
| 归档时间: |
|
| 查看次数: |
1824 次 |
| 最近记录: |