正则表达式检查ruby中的字母数字字符串

Man*_*lvi 9 ruby regex ruby-on-rails-3

我试图在ruby中验证字符串.任何包含空格,分数或任何特殊字符的字符串都应该无法通过验证.有效字符串应该只包含字符a-zA-Z0-9我的代码看起来像.

def validate(string)
    regex ="/[^a-zA-Z0-9]$/
    if(string =~ regex)
        return "true"
    else
        return "false"
end
Run Code Online (Sandbox Code Playgroud)

我收到错误:TypeError:type mismatch:给定字符串.

任何人都可以让我知道这样做的正确方法是什么?

Mic*_*ile 8

如果您要验证一行:

def validate(string)
  !string.match(/\A[a-zA-Z0-9]*\z/).nil?
end
Run Code Online (Sandbox Code Playgroud)

不需要每个人都有回报.


roh*_*t89 5

您只需检查字符串中是否存在特殊字符即可。

def validate str
 chars = ('a'..'z').to_a + ('A'..'Z').to_a + (0..9).to_a
 str.chars.detect {|ch| !chars.include?(ch)}.nil?
end
Run Code Online (Sandbox Code Playgroud)

结果:

irb(main):005:0> validate "hello"
=> true
irb(main):006:0> validate "_90 "
=> false
Run Code Online (Sandbox Code Playgroud)

  • 我建议`str.chars.all?{|ch| chars.include?(ch)}`(为了更好的可读性)。此外,使用“chars”作为变量名以及方法“chars”可能会造成混淆。最好避免使用方法名称作为变量名称。 (4认同)

eno*_*mbi 5

def alpha_numeric?(char)  
 
   if (char =~ /[[:alpha:]]/ || char =~ /[[:digit:]]/)
      true
   else
      false
   end

end
Run Code Online (Sandbox Code Playgroud)

或者

def alpha_numeric?(char)  
 
   if (char =~ /[[:alnum:]]/)
      true
   else
      false
   end

end
Run Code Online (Sandbox Code Playgroud)

我们使用匹配字母和数字的正则表达式:

上面的 [[:alpha:]] 、[[:digit:]] 和 [[:alnum:]] 是 POSIX 括号表达式,它们的优点是匹配其类别中的 Unicode 字符。希望这可以帮助。

查看下面的链接以获取更多选项: Ruby:如何确定字符是字母还是数字?