You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查字符串是否包含符号?Ruby代码正则判断疑问

如何检查Ruby字符串是否包含符号?

我来帮你搞定这个字符串符号检查的问题~你当前代码里的符号检测逻辑确实有问题,/\/./这个正则只能匹配斜杠加上任意一个字符(比如/x或者/5),但对!、@、#这类常见符号完全起不到检测作用,这就是你困惑的根源。

解决方案:用正则匹配所有非合法字符

首先明确需求:名字应该只包含字母(可能允许空格,比如带空格的全名),所以我们要检查字符串中是否存在非字母、非空格的字符(数字、符号都属于这类)。

可以用[^a-zA-Z\s]这个正则表达式,它的意思是:匹配任何不是大小写字母,也不是空格的字符。如果扫描这个正则的结果为空,说明字符串完全符合要求。

修改后的完整代码

class Beba
  def initialize
    loop do # 用loop do比while true更符合Ruby的编码习惯
      puts "Qfar emri deshironi ti vnoni bebes?"
      @@emri = gets.chomp.capitalize
      # 检查是否没有非字母/非空格的非法字符
      if @@emri.scan(/[^a-zA-Z\s]/).empty?
        puts "Ti e emertove beben me emrin: #{@@emri}"
        break
      else
        puts "Emri nuk mund te jete me numra/simbole, provoni perseri."
      end
    end
  end
end

更高效的写法:用match?方法

scan会遍历整个字符串收集所有匹配项,而match?只要找到第一个非法字符就会返回结果,性能更优:

if !@@emri.match?(/[^a-zA-Z\s]/)

额外说明

  • 如果你的名字规则不允许空格,直接把正则里的\s去掉,变成/[^a-zA-Z]/即可。
  • @@emri是类变量,如果只是在initialize方法里使用,其实用实例变量@emri更合适,能避免类变量带来的意外问题。

内容的提问来源于stack exchange,提问作者BetWars Kosovo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:59:06