A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangfeng 初级黑马   /  2012-6-24 17:39  /  2351 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhangfeng 于 2012-6-25 10:37 编辑

关于正则表达式的知识有点疑问,如果用正则表达式来检测邮箱的格式,邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线,要怎么定义规则呢?下面简单的测试代码,要怎么定义regex呢?

import java.io.*;
class  CheckEmailDemo{
       public static void main(String args[]) {
       CheckEmail();
       }
       public static void CheckEmail()
       {
                       String emailName = null;
                       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                       System.out.print("请输入邮箱号:");
                       try{
                       emailName = br.readLine();
               }catch(Exception e){}
                             String regex = "/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/ ";//此处要怎么写呢?
                       boolean flag = emailName.matches(regex);
                       if(flag)
                               System.out.println("邮箱地址"+emailName+"格式是正确的。");
                       else
                               System.out.println("邮箱地址"+emailName+"格式是非法的。");        
       }
}

7 个回复

倒序浏览
百度上有啊,百度一下就知道,顺便给你说说;
//验证Mail的正则表达式,^[a-zA-Z0-9_-]:开头必须为字母,下划线,数字,
格式:regex = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
回复 使用道具 举报
是在网上找的,像一般邮箱,手机,电话,IP这些常用的都有固定表达式存在,网上百度下就有很多。

java验证邮箱格式:
Pattern pattern = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
Matcher matcher = pattern.matcher("a@aa.com");
System.out.println(matcher.matches());

回复 使用道具 举报
控制邮箱的格式的方式有很多,出发点不一样写的regex也不一样,这是我自己写的一个,希望对你有帮助。
import java.util.regex.*;
import java.util.Scanner;
public class Test_2
{
        public static void main(String[] args)
        {
                Pattern p;
                Matcher m;
               
                Scanner read = new Scanner(System.in);
                System.out.print("请输入一串字符:");
                String str = read.nextLine();
               
                String regex = new String("[a-z[A-Z][0-9]]+@[a-z[A-Z][0-9]]+[.]");
                int first = -1;
                first = str.indexOf('.');
                System.out.println(first);
                boolean judge;
                p = Pattern.compile(regex);
                m = p.matcher(str);
                System.out.println("匹配模式:"+regex);
               
                if(m.lookingAt())
                {
                        String end = str.substring(first + 1, str.length() );
                        System.out.println(end);
                        if(end.equals("com") || end.equals("cn"))
                        {
                                judge = true;
                        }
                        else
                        {
                                judge = false;
                        }
                        System.out.println(first);
                }
                else
                {
                        judge = false;
                }
                if(judge)
                {
                        System.out.println("符合邮箱的书写格式!");
                }
                else
                {
                        System.out.println("不符合邮箱的书写格式!");
                }
        }
}
回复 使用道具 举报
本帖最后由 tongdu_simon 于 2012-6-24 18:28 编辑

   String regHead = "[a-zA-Z]\\w{5, 17}";//以字母开头,包括6~18个字符
   String regMid = "@";
   String regEnd1 = "[a-zA-Z0-9]+";//邮件服务器的主机名,如abc@163.com中的163
   String regEnd2 = "(\\.[a-zA-Z]+)+";//邮件服务器的根域名

   String regex = regHead + regMid + regEnd1 + regEnd2;

因为写正则很容易出错,所以较复杂的我都是这么分段处理的。

p.s.参考资料:
1.Java帮助文档中:java.util.regex.Pattern部分有详细说明
2.在毕向东老师视频教程的25天-07-正则表达式(练习2)

11分50秒 处有讲到这个问题。


回复 使用道具 举报

关于正则表达式的知识有点疑问,如果用正则表达式来检测邮箱的格式,邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线,要怎么定义规则呢?下面简单的测试代码,要怎么定义regex呢?
我直接说重点了
应该这样定义:
String regex = "[a-zA-Z][a-zA-Z0-9_]{5, 17}";
回复 使用道具 举报
关于正则表达式的知识有点疑问,如果用正则表达式来检测邮箱的格式,邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线,要怎么定义规则呢?下面简单的测试代码,要怎么定义regex呢?
按照你的要求,邮箱验证正则表达式如下:
String regex = "^[a-zA-Z]\\w{4,17}@\\w+(\\.\\w+)+$";

\w: 单词字符:[a-zA-Z_0-9]   
^ :行的开头
$ :行的结尾
+ : 表示前面的正则出现一次或多次
(正则) : 表示把括号内的内容作为一个组使用

其他详细请参考API文档.

毕向东老师25天的第7个视频第16分钟开始有讲解邮箱的正则说明.

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
讲的很详细,谢了,要加油了哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马