【问题标题】:Email validation using java program使用java程序进行电子邮件验证
【发布时间】:2014-06-10 15:44:27
【问题描述】:

我正在编写一个关于电子邮件验证的 java 程序。

代码不得包含:

  • 内置函数(String 方法等除外)
  • 正则表达式

代码必须包含:

  • 循环
  • 收藏

我知道如果不使用正则表达式,电子邮件验证会更加困难,但这个问题已在一次采访中被问到。

是否有可能编写这样的代码或任何替代方法?

【问题讨论】:

标签: java loops email-validation


【解决方案1】:

如果您必须在本地使用正则表达式(而不是通过电子邮件的使用进行验证),那么使用正则表达式是您的最佳选择。但是,如果您不想使用它们,那么您的代码管理中就会变得很混乱。

如何解决问题。有很多方法

  1. 使用 String Api 检查字符串中的 @ 符号。
  2. 使用 StringTokeniser 标记给定的字符串,使用条件检查。
  3. 将给定字符串拆分为多个子字符串并进一步拆分。

还有更多。

我建议不要费尽心思编写样板代码并向正则表达式打个招呼。

【讨论】:

  • 用于电子邮件验证的正则表达式(或任何本地方法)是一个非常糟糕的主意。您通过向电子邮件发送需要一些操作的东西来验证电子邮件。而且,事实上,您应该定期这样做,以防电子邮件消失。
【解决方案2】:

使用这样的东西:

public class EmailValidation {
    public static void main(String[] args) {
        String email = "SAMPLE_EMAIL";

        String[] deniedIdCharList = { ",", ";", "'", "\"", "[", "]", "|", "\\",
                 "=",  "!", "#", "$", "%", "^", "&", "*", "(", ")",
                "/", "`", "~", ":", "<", ">", "?", "{", "}" };

        int atLoc = email.indexOf("@");
        if (atLoc == -1) {
            System.out.println("fail");
        } else {
            String id = email.substring(0, atLoc);
            String domain = email.substring(atLoc + 1, email.length());

            if (domain.indexOf("@") != -1) {
                System.out.println("fail");
            }

            else {

                for (String deny : deniedIdCharList) {
                    if (id.indexOf(deny) != -1) {
                        System.out.println("fails");
                    }
                    if (domain.indexOf(deny) != -1) {
                        System.out.println("fails");
                    }

                }
                if (id.length() == 0 || domain.length() == 0) {
                    System.out.println("fails");
                }

                int dotIndex = domain.indexOf(".");
                String host = domain.substring(0, dotIndex);
                String extn = domain.substring(dotIndex + 1);
                if (host.length() == 0) {
                    System.out.println("fail");
                }
                if ((extn.length() != 2 && extn.length() != 3 && extn.length() != 5)) {
                    System.out.println("fail");
                }
                if (extn.length() == 5 && extn.indexOf(".") == -1) {
                    System.out.println("fail");
                }

            }

        }

    }
}

这适用于我对其进行的大多数标准检查。代码在效率方面可以改进(很多),但我的猜测是这更多是从 “可以完成”学术 的角度来看,而不是使用角度。如果您打算使用此方法我强烈反对并参考@vikeng21 提供的答案

【讨论】:

  • 您的代码似乎已损坏,不允许使用“+”或“-”。
  • @Fredrik - 我没有遇到通常带有 +- 的电子邮件地址(我想我更像是一个老式的电子邮件 ID 人 :))这就是为什么我将它们放在排除列表中的原因(请参阅- deniedIdCharList 变量)如果需要,我们可以将其从同一变量中删除。
  • 相信我,在电子邮件方面我已经很老了。使用 + 是一种相当标准化的方法,可以将域之前的部分拆分为用户和主题,以便更轻松地过滤内容,或者根本不必将相同的地址分发给每个人......就像 john+lists@domain.com而不是 john@domain.com。 '-' 既有效,又在域名中越来越常见。您可能不想将experts-exchange.com 上的人排除在您的服务之外。
  • 即使您不经常看到它,也最好坚持允许的内容。我曾经没有从英国订购东西,因为编写系统的人计算了域中的点来验证电子邮件。在英国,几乎所有域名都以 .co.uk 结尾,所以他认为如果少于两个点,则它是无效的......
  • 哎哟..注意到并同意。将来会牢记这一点。我还更新了代码以允许 + 和 -。感谢您指出。
【解决方案3】:

根据您的电子邮件地址的外观,可以有多种形式的电子邮件验证。 如果它看起来像 harry@potter.com 一样简单,那么可以有很多方法来验证这一点。其中之一可以是检查“@”和“。”。在 for 循环中只出现一次,并且那个 '.'总是在“@”之后。

如果你给我们一些有效电子邮件地址的例子,作为面试问题的例子,我们中的一些人可以想出一个程序来解决它。

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 2017-11-19
    • 2011-01-31
    • 2014-03-05
    • 1970-01-01
    • 2023-03-21
    • 2013-12-21
    相关资源
    最近更新 更多