Ruby =〜来检查字符串是否匹配模式

时间:2014-03-12 23:50:23

标签: ruby regex

我想检查字符串是否仅由数字和字母组成。

  def valid?
    "abc#d" =~ /\p{Alnum}/
  end

但是这会返回0.我希望它返回nil,因为它包含#,它既不是字母也不是数字。

我做错了什么?

4 个答案:

答案 0 :(得分:4)

有问题的是你实际上正在检查:

  • 字符串是否包含任何数字或字母,

但你想检查一下:

  • 字符串是否包含除数字或字母以外的任何内容。

您可以这样检查:

def valid?
  "abc#d" !~ /\P{Alnum}/
end

答案 1 :(得分:2)

听起来你想要检查以确保该字符串只包含 数字和字母:

"abc#d" =~ /\A\p{Alnum}+\z/

答案 2 :(得分:1)

试试这个:

"abc#d" =~ /^[A-Za-z0-9]+$/

答案 3 :(得分:1)

string !~ /[_\W]/也有效。

"abc#d" !~ /[_\W]/ #=> false 
"abc_d" !~ /[_\W]/ #=> false
"abc5d" !~ /[_\W]/ #=> true