Life

Wednesday, February 27, 2019

正则表达式-java日期检查

在Java编程中检查日期格式要比上文的邮箱检查简洁些。
以下示例演示如何使用String类的matches()方法检查日期格式是否正确。
package regex.test;

/**
 * description:日期检查2
 * @auther :田江涛
 * @date :2019-02-27 9:03
 */
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckDateFormat2 {
    public static void main(String args[]) {
        List dates = new ArrayList();
        dates.add("1990-12-21");
        dates.add("1990-12-31");
        dates.add("1990-12-32");
        dates.add("09-12-12");
        dates.add("2001-02-10");
        dates.add("1989-06-04");
        dates.add("45-09-12");
        dates.add("18/02/02");
        dates.add("2019/04/21");
        String regex = "^([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$";
        Pattern pattern = Pattern.compile(regex);

        for (Object date : dates) {
            Matcher matcher = pattern.matcher((CharSequence) date);
            System.out.println(date + " : " + matcher.matches());
        }
    }
}
示例输出结果:

1990-12-21 : true
1990-12-31 : true
1990-12-32 : false
09-12-12 : false
2001-02-10 : true
1989-06-04 : true
45-09-12 : false
18/02/02 : false
2019/04/21 : false

代码示例使用正则表达式:"^([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$",
根据对照正则表达式语法表,我们可以解释该正则表达式匹配的字符串形式:
^([0-9]{4}) : 开头匹配0-9且为4位数字,对应年份;
- : 以‘-’分割,所以示例中‘/’非法;
(1[0-2]|0[1-9]) : 匹配10,11,12 或者是 01-09,对应月份;
(3[01]|[12][0-9]|0[1-9])$ : 以30、31或10-19、20-29或01-09结尾,对应日期。

当然有一点小问题就是它无法考虑平年2月只有28天的情况,不过在这里并不追究了。

Matcher.maches()方法:

public static boolean matches(String regex,  CharSequence input)
编译给定正则表达式并尝试将给定输入与其匹配,返回的是一个boolean值。  
可以使用快捷方法的形式对代码进行简化:
Pattern.matches(regex, input);
Pattern.compile(regex).matcher(input).matches() ; 

for (Object date : dates) {
//          Matcher matcher = pattern.matcher((CharSequence) date);
            boolean b = Pattern.compile(regex).matcher((CharSequence) date).matches();
            System.out.println(date + " : " + b);
        }

版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者Leslie Tien和本文原始地址:
https://leslietien.blogspot.com/2019/02/java_26.html

Tuesday, February 26, 2019

正则表达式--Java邮箱验证

在Java编程中,如何验证电子邮件地址格式?
以下示例使用String类的matches()方法来验证电子邮件地址。
String.matches() 这个方法主要是返回是否匹配指定的字符串,如果匹配则为true,否则为false

package regex.test;

/**
 * description:验证电子邮件地址
 * @auther :jiangtoa.tian
 * @date :2019-02-26 15:46
 */
public class ValidateEmailFormat {
    public static void main(String[] args) {
        //String EMAIL_REGEX = "^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$"; //正则表达式1
        String EMAIL_REGEX ="\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";    //正则表达式2
                String email1 = "admin@admin.com";
        boolean b = email1.matches(EMAIL_REGEX);
        System.out.println("email:" + email1 +" : valid = "+b);

        String email2 = "admin&admin.com";
        boolean b2 = email2.matches(EMAIL_REGEX);
        System.out.println("email:" + email2 +" : valid = "+b2);
    }
}
上述代码示例将产生以下结果:
email:admin@admin.com : valid = true
email:admin&admin.com : valid = false
代码实际上并不长,关键点是其中所使用的正则表达式.
在代码中使用了两个正则表达式:

  1. "^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$"
  2. "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"

都可以正确验证邮箱格式,所以说正则表达式并不是唯一的,关键是要能明白正则表达式的语法.
  1. 字符描述:
  2. ^ :匹配输入的开始位置。
  3. \:将下一个字符标记为特殊字符或字面值。
  4. * :匹配前一个字符零次或几次。
  5. + :匹配前一个字符一次或多次。
  6. [a-z] :表示某个范围内的字符。与指定区间内的任何字符匹配。
  7. \w :与任何单词字符匹配,包括下划线。
  8. $ :匹配输入的结尾。
对照语法表就能大致读懂正则表达式匹配的内容.
注:在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。这也就是为什么表示任一字符的正则表达式是 \\w.

版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者Leslie Tien和本文原始地址:
https://leslietien.blogspot.com/2019/02/java.html