任务:标识符必须包含至少一个非数字AND且仅包含数字,字母,“_”和“ - ”字符。
因此'qwerty','identifier-45','u _-_-',' - 42-'是有效的标识符。
'123456','w& 1234','标识符42'无效。
我是否可以使用正则表达式实现此目的。
id.match(/\w\d/)
或者有多场比赛
id.match(/\w/) && id.match(/\d/)
或者我可能会创建一个包含所有允许字符的数组,并过滤删除它们的原始字符串(如果其余部分超过[],则有禁用字符)?
id.to_a.select{|character| !((0..9) + (a..z) + ['-','_']).include?(character)}.count == 0
即。所有允许的字符都从字符串中排除,如果其长度超过1,则会有一些禁用的字符(如& )
答案 0 :(得分:3)
使用正向前瞻:
pattern = /^(?=.*\D)[-\w]+$/
pattern =~ 'qwerty'
# => 0
pattern =~ 'identifier-45'
# => 0
pattern =~ 'u_-_-'
# => 0
pattern =~ '-42-'
# => 0
pattern =~ '123456'
# => nil
pattern =~ 'w&1234'
# => nil
pattern =~ 'identifier 42'
# => nil
答案 1 :(得分:1)
您可以使用预测来实施规则:
/^(?=.*\D)[\w-]*$/
此正则表达式仅匹配至少包含一个非数字的字符串,仅包含字母数字字符(不是重音符号),_
和-
。