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

ycl3bljg  于 2022-11-04  发布在  Ruby
关注(0)|答案(8)|浏览(144)

我正在尝试验证ruby中的字符串。任何包含空格、分数或任何特殊字符的字符串都将无法通过验证。有效的字符串应该只包含字符a-zA-Z 0 -9我的代码如下所示。

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

出现错误:TypeError:类型不匹配:给定的字符串。
谁能告诉我正确的做法是什么?

htrmnn0y

htrmnn0y1#

如果要验证行,请执行以下操作:

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

每个都不需要退货。

nkkqxpd9

nkkqxpd92#

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

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
jucafojl

jucafojl3#

def alpha_numeric?(char)  

   if (char =~ /[[:alpha:]]/ || char =~ /[[:digit:]]/)
      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?

velaa5lx

velaa5lx4#

无正则表达式:

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

carvr3hs5#

上面的答案很好,但仅供参考,你的错误消息是因为你用双引号"开始你的正则表达式。你会注意到你的方法中有奇数(5)个双引号。
此外,您可能希望以值的形式返回true和false,而不是以带引号的字符串的形式返回。

ivqmmu1c

ivqmmu1c6#

类似于@steenslag已经提到的非常高效的regex-ish方法,并且几乎一样快:

str.tr("a-zA-Z0-9", "").length.zero?

str.tr("a-zA-Z0-9", "") == 0

但是,使用tr的一个好处是,您还可以选择使用相同的基本公式来分析结果:

str = "ABCxyz*123$"

rejected_chars = str.tr("a-zA-Z0-9", "")

# =>  *$

is_valid = rejected_chars.length.zero?

# => false
mnemlml8

mnemlml87#

类似于@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
nbewdwxp

nbewdwxp8#

在Ruby 2.4及更高版本中使用.match?

Ruby 2.4引入了一个方便的返回布尔值的.match?方法。
在你的情况下,我会这样做:


# 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

相关问题