检查字符串是否仅包含允许的字符

时间:2014-02-06 10:50:27

标签: ruby regex string

任务:标识符必须包含至少一个非数字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,则会有一些禁用的字符(如&

2 个答案:

答案 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-]*$/

此正则表达式仅匹配至少包含一个非数字的字符串,仅包含字母数字字符(不是重音符号),_-