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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-3 15:50  /  3279 人查看  /  38 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙沛 于 2012-9-3 15:54 编辑

我是新手,请教个问题,别见笑。今天看了点关于正则表达式的知识,遇到了点疑问,如果用正则表达式来检测邮箱的格式,邮箱要以字母开头,包括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 = "";//此处要怎么写呢?
                       boolean flag = emailName.matches(regex);
                       if(flag)
                               System.out.println("邮箱地址"+emailName+"格式是正确的。");
                       else
                               System.out.println("邮箱地址"+emailName+"格式是非法的。");        
       }
}

点评

较精确:[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+,不太精确:\\w+@\\w+(\\.\\w+)+;我一般直接第二种~!  发表于 2012-9-3 18:47

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

38 个回复

倒序浏览
String regex =“^([a-zA-Z0-9]|[._])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+“
([a-zA-Z0-9]|[._])+    数字,大小写字母或者"."或者"_ "  至少要出现一次  ( "|" 是或者的意思)
然后是 @
([a-zA-Z0-9_-])+   数字,大小写字母,"_","- "  至少要出现一次
(\.[a-zA-Z0-9_-])+ 必须要有"." "."后面为  (数字,大小写字母"_""-")至少要出现一次
回复 使用道具 举报
  1. /**
  2. * 邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线
  3. */
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;

  7. public class CheckEmailDemo {

  8.         public static void main(String args[]) {
  9.                 CheckEmail();
  10.         }

  11.         public static void CheckEmail() {
  12.                 String emailName = null;
  13.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  14.                 boolean flag = false;
  15.                 System.out.print("请输入邮箱号:");
  16.                 String regex = "^[a-zA-Z]\\w{5,18}$";// 此处要怎么写呢?
  17.                 try {
  18.                         emailName = br.readLine();
  19.                         flag = emailName.matches(regex);
  20.                         if (flag)
  21.                                 System.out.println("邮箱地址" + emailName + "格式是正确的。");
  22.                         else
  23.                                 System.out.println("邮箱地址" + emailName + "格式是非法的。");
  24.                 } catch (Exception e) {
  25.                         e.printStackTrace();
  26.                 } finally {
  27.                         if (br != null) {
  28.                                 try {
  29.                                         br.close();
  30.                                 } catch (IOException e) {
  31.                                         e.printStackTrace();
  32.                                 }
  33.                         }
  34.                 }
  35.         }

  36. }
复制代码
回复 使用道具 举报
对不起.没看完题目,原来是要邮箱的规则.我上面的代码没有完成好邮箱的格式的功能,其他的都完成了,我再改改.
回复 使用道具 举报
  1. /**
  2. * 邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线
  3. */
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;

  7. public class CheckEmailDemo {

  8.         public static void main(String args[]) {
  9.                 CheckEmail();
  10.         }

  11.         public static void CheckEmail() {
  12.                 String emailName = null;
  13.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  14.                 boolean flag = false;
  15.                 System.out.print("请输入邮箱号:");
  16.                 String regex = "^[a-zA-Z][\\w*@\\.\\w{3}]{5,18}$";// 此处要怎么写呢?
  17.                 try {
  18.                         emailName = br.readLine();
  19.                         flag = emailName.matches(regex);
  20.                         if (flag)
  21.                                 System.out.println("邮箱地址" + emailName + "格式是正确的。");
  22.                         else
  23.                                 System.out.println("邮箱地址" + emailName + "格式是非法的。");
  24.                 } catch (Exception e) {
  25.                         e.printStackTrace();
  26.                 } finally {
  27.                         if (br != null) {
  28.                                 try {
  29.                                         br.close();
  30.                                 } catch (IOException e) {
  31.                                         e.printStackTrace();
  32.                                 }
  33.                         }
  34.                 }
  35.         }

  36. }
复制代码
好久不玩正则了,呵呵.

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人回帖,继续加油

查看全部评分

回复 使用道具 举报
本帖最后由 杨卓儒 于 2012-9-3 18:12 编辑

学习了。。。。
回复 使用道具 举报
武庆东 发表于 2012-9-3 16:02
String regex =“^([a-zA-Z0-9]|[._])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+“
([a-zA-Z0-9]|[._])+    数 ...

假如将输入邮箱地址的长度控制为6,应该怎么写呢.
回复 使用道具 举报
马镱洵 发表于 2012-9-3 17:40
假如将输入邮箱地址的长度控制为6,应该怎么写呢.

在邮箱名为什么要加"^",这个符号不是用来表示否的意思吗,加了就是除了后面组的意思啊,不明白
回复 使用道具 举报
String regex ="[a-zA-Z0-9_]{6}+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}"

这样可以吗,控制邮箱长度为6
回复 使用道具 举报
杨卓儒 发表于 2012-9-3 17:51
在邮箱名为什么要加"^",这个符号不是用来表示否的意思吗,加了就是除了后面组的意思啊,不明白 ...

^在中括号外面,就代码是行的开头.
回复 使用道具 举报
杨卓儒 发表于 2012-9-3 17:53
String regex ="[a-zA-Z0-9_]{6}+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}"

这样可以吗,控制邮箱长度为6 ...

我的意思是总长度为6,例如:
a@.com

就是这样,长度为6,还要有@.xxx的格式.
回复 使用道具 举报
杨卓儒 发表于 2012-9-3 17:53
String regex ="[a-zA-Z0-9_]{6}+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}"

这样可以吗,控制邮箱长度为6 ...

你这代码很容易就看懂了.但是没有实现功能的,功能是:
要以字母打头,并且要有@.xxx的格式,更重要的是总长度为6.
回复 使用道具 举报
马镱洵 发表于 2012-9-3 17:58
^在中括号外面,就代码是行的开头.

受教了,我在API pattern类中没有找到这个符号的用法啊,求大侠给个阅读资料
回复 使用道具 举报
马镱洵 发表于 2012-9-3 17:58
^在中括号外面,就代码是行的开头.

找到了,原来是边界匹配器中的一员。 受教
回复 使用道具 举报
马镱洵 发表于 2012-9-3 17:59
我的意思是总长度为6,例如:
a@.com


String regex ="^([a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}){6}"

这样?
回复 使用道具 举报
杨卓儒 发表于 2012-9-3 18:08
找到了,原来是边界匹配器中的一员。 受教

要以字母打头,并且要有@.xxx的格式,更重要的是总长度为6.

你能完成吗?
回复 使用道具 举报
杨卓儒 发表于 2012-9-3 18:11
String regex ="^([a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}){6}"

这样?

不对.
我测试过了,我输入"a@.com",结果无法匹配.
回复 使用道具 举报
马镱洵 发表于 2012-9-3 18:11
要以字母打头,并且要有@.xxx的格式,更重要的是总长度为6.

你能完成吗?

没懂,不要域名了? a@b.com  你意思是 a@.com? 不明白啊
回复 使用道具 举报
杨卓儒 发表于 2012-9-3 18:11
String regex ="^([a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}){6}"

这样?

如果不控制总长度,确实非常简单,要控制总长度,我还想不出来该如何做,呵呵.
回复 使用道具 举报
马镱洵 发表于 2012-9-3 18:15
如果不控制总长度,确实非常简单,要控制总长度,我还想不出来该如何做,呵呵. ...

等我吃饭完再搞起,一定有办法
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马