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

Ruby中如何验证用户输入邮箱满足非空、含@及点号条件?

问题分析与解决方法

你的代码核心问题是条件判断逻辑完全错误:

  • 原代码的if email.empty? && email.include?("@") && email.include?(".")要求输入为空的同时包含@和.,这本身就是矛盾的,永远不会触发puts "working",必然走else分支重新输入。
  • 正确的逻辑应该是:输入非空(!email.empty?),并且包含@,同时包含.。

另外,递归调用email()虽然能实现重复输入,但多次输入后可能触发栈溢出,更推荐用循环实现。

修复后的递归版本

def email()
    print "What is the students email? "
    email = gets.chomp

    # 修正条件:非空 + 包含@ + 包含.
    if !email.empty? && email.include?("@") && email.include?(".")
        puts "working"
    else
        puts "Please enter a valid email. "
        email()
    end 
end

email()

更优的循环版本(避免栈溢出)

def get_valid_email
    loop do
        print "What is the student's email? "
        email = gets.chomp
        if !email.empty? && email.include?("@") && email.include?(".")
            puts "working"
            break # 验证通过后退出循环
        else
            puts "Please enter a valid email."
        end
    end
end

get_valid_email()

补充说明

如果需要更严谨的邮箱验证,可以使用正则表达式(比如/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i),但你当前需求的三个基础验证,修正条件逻辑就足够解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:25:30