【问题标题】:Ruby checking email addressRuby 检查电子邮件地址
【发布时间】:2016-05-28 01:23:01
【问题描述】:

在创建循环以检查电话号码是否为 10 个字符后,我相信电话问题现已解决。现在我正在检查电子邮件地址,确保它正确输出,并确保用户输入了 2 个名称。获取电子邮件地址以验证和输出时出现问题。

    def fullname
        "#{first_name} #{last_name}"
    end

    puts "Enter your first and last name (John Doe): "
    name=gets.to_s
    names=name.split(" ", 2)
    puts "Enter your email address (joe@info.com): "
    email=gets
    puts "Enter your phone number including area code (numbers only): "
    number=gets.to_i

     def valid_email(email)
        email=email.to_s
        email="user@company_name.com"
        loop do
          if (email=/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i)
          break
          else
          puts "Invalid email address entered. Please try again. "
          end
        end
    end

    def phone_number(number)
        number        = number.to_s

        area_code     = number.length == 10 ? "(#{number[0..2]}) " : '' 

        office_code   = number[-7..-5] 
        specific_line = number[-4..-1]
    loop do
        if number =10
        break   
            else
            puts "Invalid phone number entered. Please try again."
            end
        end
        "#{area_code}#{office_code}-#{specific_line}"
    end

    puts names
    puts valid_email(email)
    puts phone_number(number)

【问题讨论】:

  • 如果有更简单的方法以(123)123-1234的格式输出电话号码,请告诉我。谢谢!
  • 您的直接错误来自未定义“symbolize_keys”这一事实。 'symbolize_keys' 方法来自 rails,看起来你正在尝试做 vanilla ruby​​。避免依赖该方法的最简单方法是将您的选项作为符号传递。
  • This blog entry 可能感兴趣。
  • 完全改变你的问题的意思是不受欢迎的行为。如果您有新问题,请再问一个问题。

标签: ruby


【解决方案1】:

正如 Some Guy 在对您的问题的评论中提到的,您的错误来自使用未定义的方法 symbolize_keys。如果你愿意,你可以重写方法以在访问数组时使用字符串而不是符号。

但是,我在您的代码中没有看到您曾经调用 number_to_phone 并传入选项哈希的地方,这需要设置才能找到相关数据。最好完全删除该代码并弄清楚如何在实际方法中获取区号。

如果有更简单的方法以 (123) 123-1234 的格式输出电话号码,请告诉我。

您可以尝试将数字分成几部分,然后将其重新组合在一起。前三个数字是区号(如果存在)。接下来(或前)三个数字是办公室代码。最后三个数字是特定的行。最简单的方法是从数字的末尾开始,获取适当的块,然后将所有内容一起返回。

def phone_number(number)
  # Strings are easier to work with
  number        = number.to_s

  # Raise an error if the length is invalid
  raise "This is not a phone number" if number.length != 7 || number.length != 10

  # Set the area code if it exists, and add the parens
  area_code     = number.length == 10 ? "(#{number[0..2]}) " : '' 

  # Set the office code and line number from the end of the string because there may not be an area code
  office_code   = number[-7..-5] 
  specific_line = number[-4..-1]

  # Return the final product
  "#{area_code}#{office_code}-#{specific_line}"
end

检查电子邮件是否有效:

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/
def valid_email(email)
  raise "This is not an email address" unless email =~ VALID_EMAIL_REGEX
end

编辑:phone_number 方法并添加了valid_email 方法。

【讨论】:

  • 这格式正确,现在我需要使用循环来检查输入的电话号码是否也有效。以及电子邮件地址已输入且有效。
  • 如果您对有效号码的定义是7位或10位,那么您可以在phone_number方法的开头进行测试。要检查输入的电子邮件地址是否有效,我会使用正则表达式。
  • 我会查看this stackoverflow 以了解使用哪个电子邮件正则表达式
  • 如何向该程序添加正则表达式?我以前从未使用过正则表达式。
  • 我仍在努力让用户输入验证并显示为:用户:John Doe 电话:(555) 555-5555 电子邮件:johndoe@aol.com
猜你喜欢
  • 2017-07-21
  • 2011-04-16
  • 2019-12-29
  • 2010-10-22
  • 2016-04-06
  • 2013-03-11
  • 2012-04-08
  • 2011-07-14
  • 2012-10-03
相关资源
最近更新 更多