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

I want to check whether name contains any special character or number in Ruby

提问人:spd 提问时间:8/11/2023 最后编辑:jaco0646spd 更新时间:8/11/2023 访问量:95

问:

这是代码 -

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 工作正常

正则表达式 Ruby Selenium-WebDriver

评论

2赞 Greg Burghardt 8/11/2023
我写 Ruby 已经有一段时间了,但你的代码有 .由于这是一个正则表达式文字,所以不应该是 - s 之前的单个反斜杠\\s/^[a-zA-Z\s]+$/\s
2赞 pjs 8/11/2023
尝试。正如 @GregBurghardt 所指出的,您不想要双反斜杠。此外,在括号外和第一个位置将正则表达式锚定到行的开头。在括号内,它否定了集合。不需要 或 ,找到一个不是有效字符或空格的元素就足够了。有关详细信息,请参阅 docs.ruby-lang.org/en/master/.../[^a-zA-Z\s]/^+$
1赞 Cary Swoveland 8/11/2023
您应该避免使用术语“特殊字符”,因为它在 Ruby 中没有定义。相反,只需询问如何确定字符串是否包含字母(大写或小写)或空格以外的任何字符。
1赞 CAustin 8/11/2023
“特殊性格”到底是什么意思?
0赞 Jörg W Mittag 8/11/2023
“它不起作用”不是一个足够精确的问题描述,我们无法为您提供帮助。什么不起作用?它怎么不工作?你的代码有什么问题?您是否收到错误消息?错误消息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您观察到的行为是否不是期望的行为?什么是期望的行为,为什么,观察到的行为是什么,它们在哪些方面有所不同?

答:

-1赞 Gautam 8/11/2023 #1

您可以使用以下正则表达式来验证字符串是否至少包含一个特殊字符或至少一个数字。

str.match?(/[^a-zA-Z0-9]|\d/)

2赞 Tom Lord 8/11/2023 #2
  1. 您不需要在 ruby 正则表达式中对字符进行双重转义。 表示“空白字符”; 表示“反斜杠,然后是”(表示反斜杠)。\s\\ss[\\s]s

  2. =~是“匹配”运算符。 检查字符串匹配的内容,而不是不匹配的内容。str=~/^[a-zA-Z\\s]+$/

总之,有几种方法可以写这个,但这里有几种:

# 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

查看文档:此处和此处

-1赞 TheTurTel500 8/11/2023 #3

在正则表达式中,无需转义反斜杠 ()。因此,/^[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")