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

时间:2015-10-21 18:54:05

标签: 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

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

任何人都可以告诉我这样做的正确方法是什么?

7 个答案:

答案 0 :(得分:8)

如果您要验证一行:

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

不需要每个人都有回报。

答案 1 :(得分:2)

您可以检查字符串中是否存在特殊字符。

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

结果:

irb(main):005:0> validate "hello"
=> true
irb(main):006:0> validate "_90 "
=> false

答案 2 :(得分:1)

def alpha_numeric?(char)  

   if((char =~ /[[:alpha:]]) || (char =~ [[:digits:]]))
      true
   else
      false
   end

end

def alpha_numeric?(char)  

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

end

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

上面的[[:alpha:]],[[:digit:]]和[[:alnum:]]是POSIX括号表达式,它们具有在其类别中匹配unicode字符的优点。希望这有助于

在下面的链接中查看更多选项: Ruby: How to find out if a character is a letter or a digit?

答案 3 :(得分:0)

与@ rohit89相似:

VALID_CHARS = [*?a..?z, *?A..?Z, *'0'..'9']
  #=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
  #    "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
  #    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
  #    "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
  #    "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

def all_valid_chars?(str)
  a = str.chars
  a == a & VALID_CHARS
end

all_valid_chars?('a9Z3')  #=> true
all_valid_chars?('a9 Z3') #=> false

答案 4 :(得分:0)

没有正则表达式:

def validate(str)
  str.count("^a-zA-Z0-9").zero?  # ^ means "not"
end

答案 5 :(得分:0)

上面有很好的答案,但仅供参考,您的错误消息是因为您使用双引号"启动了正则表达式。您会注意到您的方法中有双引号的奇数(5)。

此外,您可能希望将true和false作为值而不是作为带引号的字符串返回。

答案 6 :(得分:0)

在 Ruby 2.4+ 中使用 .match?

Ruby 2.4 引入了一个方便的返回布尔值的 # Checks for any characters other than letters and numbers. # Returns true if there are none. Returns false if there are one or more. # def valid?( string ) !string.match?( /[^a-zA-Z0-9]/ ) # NOTE: ^ inside [] set turns it into a negated set. end 方法。

在你的情况下,我会做这样的事情:

      reducer(state, action: PayloadAction<{x: string; anotherProp: string; uuid: string}>) {