如何判断随机字符串是否是电子邮件地址或其他内容

Ste*_*lly 8 java email

我不认为之前已经问过这个问题......我当然找不到这个要求.

背景

有一个返回ID的人的API.一般来说,ID应被视为区分大小写...但如果ID实际上是他们的电子邮件地址......并且您正在谈论此API的一个不那么出色的实现,它返回其电子邮件地址的大小写混合版本,有很多乐趣......

所以你正在谈论一个实现......它会给你提供像ID一样的URL,例如

  • http://foo.bar.com/blahblahblah

接下来你可以和另一个实现交谈......这会给你一些非显而易见的ID,比如说

  • as€jlhdésdj678hjghas7t7qhjdhg£

你可能正在谈论一个很好的实现,它会给你一个漂亮的小写电子邮件地址:

  • bob.mcspam@acme.org

或者你可能正在谈论不那么出色的实现,它返回完全等效的ID

  • bob.mcspam@ACME.org

RFC 2821规定只有邮箱区分大小写,但利用区分大小写的情况会导致大量的操作间问题......

我想要做的是识别电子邮件的字符串并强制域小写.识别URI字符串一样是容易的方案是要么http还是https我只需要小写域名这是一个容易得多解析.

如果给出一个由外部服务提供的字符串,是否有我可以使用的测试将确定该字符串是否是电子邮件地址,以便我可以强制域名小写?

可以忽略少量电子邮件地址,并且不会使域名小写.(允许假阴性)

如果字符串的一部分不是电子邮件地址的域部分,则强制将字符串的一部分强制为小写是不可接受的.(不允许误报)

 更新

请注意,这个问题是来自微妙的不同这个这个是在你的这两个问题的背景已经知道该字符串应该是电子邮件地址.

在这个问题的上下文中,我们不知道字符串是电子邮件地址还是其他东西......这使得这个问题不同

Kum*_*tra 8

-尝试以下代码,这可能对您有所帮助.

public class EmailCheck {

    public static void main(String[] args){


        String email = "vivek.mitra@gmail.com";
        Pattern pattern = Pattern.compile("[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");
        Matcher mat = pattern.matcher(email);

        if(mat.matches()){

            System.out.println("Valid email address");
        }else{

            System.out.println("Not a valid email address");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

-另请查看此站点,该站点显示了另一个更深入的验证使用regular expression.使用正则表达式进行更深入的验


Shi*_*hiv 7

您可以使用以下方法验证电子邮件;

String email ="nbjvkj@kn.com"
Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
Matcher m = p.matcher(email);
boolean matchFound = m.matches();
if (matchFound) {
    //your work here
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*lly 1

感谢@Dukeling

private static toLowerCaseIfEmail(String string) {
    try {
        new InternetAddress(string, true);
    } catch (AddressException e) {
        return string;
    }
    if (string.trim().endsWith("]")) {
        return string;
    }
    int lastAt = string.lastIndexOf('@');
    if (lastAt == -1) {
        return string;
    }
    return string.substring(0,lastAt)+string.substring(lastAt).toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,应该做所需的事情。

更新

(comment)由于前一个忽略了最后一个之后语法的可能性@......让我们面对现实,如果我们看到它们应该快速退出并返回未修改的字符串

private static toLowerCaseIfEmail(String string) {
    try {
        new InternetAddress(string, true);
    } catch (AddressException e) {
        return string;
    }
    int lastAt = string.lastIndexOf('@');
    if (lastAt == -1 
        || string.lastIndexOf(']') > lastAt
        || string.lastIndexOf(')' > lastAt) {
        return string;
    }
    return string.substring(0,lastAt)+string.substring(lastAt).toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)