我想检查名称是否包含Ruby中的任何特殊字符或数字

fsi0uk1n  于 2023-10-18  发布在  Ruby
关注(0)|答案(3)|浏览(114)

这是代码-

def username_chk(str)
     if str.length <=20         
        if str=~/^[a-zA-Z\\s]+$/
        puts "Invalid User name"
        else
        puts str
       end  
     else puts"User name can contain Max 20 character"
     end
  end   
      username_chk("Mark ju09")

没有用我也试过:

str=~/[a-zA-Z]+\\.?/

str=~/^[a-zA-Z\s]+$/这个表达式在java中使用Pattern工作正常

ppcbkaq5

ppcbkaq51#

1.你不需要在ruby正则表达式中使用双转义符。\s表示“空白字符”; \\s表示“一个反斜杠,然后是s“([\\s]表示反斜杠 * 或 * 一个s)。

  1. =~是一个“匹配”运算符。str=~/^[a-zA-Z\\s]+$/检查字符串 does 匹配的内容,而不是它 * doesn 't * 匹配的内容。
    总之,有几种方法可以写这个,但这里有几个:
# pick one of the `if` statements below...
if str =~ /^[a-zA-Z\s]+$/
if str =~ /^[a-z\s]+$/i
  puts str # (valid user name)
end

# Or, pick one of these:
# (Note that !~ means "doesn't match"; the opposite of =~)
if str !~ /^[a-zA-Z\s]+$/
if str !~ /^[a-z\s]+$/i
if str =~ /[^a-zA-Z\s]/
if str =~ /[^a-z\s]/i
  puts "Invalid User name"
end

参见文档:这里和这里

hiz5n14c

hiz5n14c2#

您可以使用下面的正则表达式来验证字符串是否至少有一个特殊字符或至少有一个数字。
str.match?(/[^a-zA-Z0-9]|\d/)

h5qlskok

h5qlskok3#

在正则表达式中,不需要转义反斜杠()。因此,/^[a-zA-Z\s]+$/变为/^[a-zA-Z\s]+$/。也是“无效用户名”的顺序,并在有效时放置str行以显示用户名。

def username_chk(str)
 if str.length <= 20
  if str =~ /^[a-zA-Z\s]+$/
   puts str
  else
   puts "Invalid User name"
  end
 else
  puts "User name can contain Max 20 characters"
 end 
end

username_chk("Mark ju09")

相关问题