如何检查字符串是否包含符号?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
相关产品推荐
相关产品推荐

