常用正则验证

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public abstract class StringVerifyHelper {

    /**
     * 匹配纯汉字
     * 格式  :
     * 匹配  :
     * 不匹配:
     */
    public static final String chinese_regexp = "^[\u0391-\uFFE5]+$";

    /**
     * 匹配图象
     * 格式: /相对路径/文件名.后缀 (后缀为gif,dmp,png)
     * 匹配 : /forum/head_icon/admini2005111_ff.gif 或 admini2005111.dmp
     * 不匹配: c:/admins4512.gif
     */
    public static final String icon_regexp = "^(/{0,1}\\w){1,}\\.(gif|dmp|png|jpg)$|^\\w{1,}\\.(gif|dmp|png|jpg)$";

    /**
     * 匹配email地址(^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$)
     * 格式: xxx@xxx.xxx.xx
     * 匹配 : foo@bar.com 或 foobar@foobar.com.au
     * 不匹配: foo@bar 或 $$$@bar.com
     */
    public static final String email_regexp = "(?:\\w[-._\\w]*\\w@\\w[-._\\w]*\\w\\.\\w{2,3}$)";

    /**
     * 匹配日期
     * 格式(首位不为0): XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X
     * 范围:1900--2099
     * 匹配 : 2005-04-04
     * 不匹配: 01-01-01
     */
    public static final String date_regexp = "^((((19){1}|(20){1})\\d{2})|\\d{2})[-\\s]{1}((0{1}\\d{1})||(1{1}[0-2]{1}))[-\\s]{1}[0-3]{1}\\d{1}$";

    /**
     * 匹配电话
     * 格式为: 0XXX-XXXXXX(10-13位首位必须为0) 或0XXX XXXXXXX(10-13位首位必须为0) 或
     * (0XXX)XXXXXXXX(11-14位首位必须为0) 或 XXXXXXXX(6-8位首位不为0) 或 XXXXXXXXXXX(11位首位不为0)
     * 匹配  : 0371-123456 或 (0371)1234567 或 (0371)12345678 或 010-123456 或 010-12345678 或 12345678912
     * 不匹配: 1111-134355 或 0123456789
     */
    public static final String phone_regexp = "^(?:0[0-9]{2,3}[-\\s]{1}|\\(0[0-9]{2,4}\\))[0-9]{6,8}$|^[1-9]{1}[0-9]{5,7}$|^[1-9]{1}[0-9]{10}$";

    /**
     * 匹配手机
     * 格式  :
     * 匹配  :
     * 不匹配:
     */
    public static final String handset_regexp = "^1[\\d]{10}$";

    /**
     * 匹配身份证
     * 格式为: XXXXXXXXXX(10位) 或 XXXXXXXXXXXXX(13位) 或 XXXXXXXXXXXXXXX(15位) 或 XXXXXXXXXXXXXXXXXX(18位)
     * 匹配 : 0123456789123
     * 不匹配: 0123456
     */
    public static final String ID_card_regexp = "^\\d{10}|\\d{13}|\\d{15}|\\d{18}$";

    /**
     * 匹配邮编代码
     * 格式为: XXXXXX(6位)
     * 匹配 : 012345
     * 不匹配: 0123456
     */
    public static final String ZIP_regexp = "^[0-9]{6}$";

    /**
     * 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号> 左尖括号< 反斜杠\
     * 即空格,制表符,回车符等 )
     * 格式为: x 或 一个一上的字符
     * 匹配 : 
     * 不匹配: 
     */
    public static final String non_special_char_regexp = "^[^'\"\\;,:-<>\\s].+$";

    /**
     * 判断是不是合法字符 c 要判断的字符
     * 格式  : 
     * 匹配  : 
     * 不匹配: 
     */
    public static final String fit_letter_regexp = "[\\w\\.-_]*";

    /**
     * 匹配非负整数(正整数 + 0)
     */
    public static final String non_negative_integers_regexp = "^\\d+$";

    /**
     * 匹配不包括零的非负整数(正整数 > 0)
     */
    public static final String non_zero_negative_integers_regexp = "^[1-9]+\\d*$";

    /**
     * 匹配正整数
     */
    public static final String positive_integer_regexp = "^[0-9]*[1-9][0-9]*$";

    /**
     * 匹配非正整数(负整数 + 0)
     */
    public static final String non_positive_integers_regexp = "^((-\\d+)|(0+))$";

    /**
     * 匹配负整数
     */
    public static final String negative_integers_regexp = "^-[0-9]*[1-9][0-9]*$";

    /**
     * 匹配整数(^[-\\+]?[\\d]+$)
     */
    public static final String integer_regexp = "^-?\\d+$";

    /**
     * 匹配非负浮点数(正浮点数 + 0)
     */
    public static final String non_negative_rational_numbers_regexp = "^\\d+(\\.\\d+)?$";

    /**
     * 匹配正浮点数
     */
    public static final String positive_rational_numbers_regexp = "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$";

    /**
     * 匹配非正浮点数(负浮点数 + 0)
     */
    public static final String non_positive_rational_numbers_regexp = "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$";

    /**
     * 匹配负浮点数
     */
    public static final String negative_rational_numbers_regexp = "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$";

    /**
     * 匹配浮点数(^[-\\+]?\\d+\\.\\d+$)
     */
    public static final String rational_numbers_regexp = "^(-?\\d+)(\\.\\d+)?$";

    /**
     * 匹配由26个英文字母组成的字符串
     */
    public static final String letter_regexp = "^[A-Za-z]+$";

    /**
     * 匹配由26个英文字母的大写组成的字符串
     */
    public static final String upward_letter_regexp = "^[A-Z]+$";

    /**
     * 匹配由26个英文字母的小写组成的字符串
     */
    public static final String lower_letter_regexp = "^[a-z]+$";

    /**
     * 匹配由数字和26个英文字母组成的字符串
     */
    public static final String letter_number_regexp = "^[A-Za-z0-9]+$";

    /**
     * 匹配由数字、26个英文字母或者下划线组成的字符串
     */
    public static final String letter_number_underline_regexp = "^\\w+$";

    /**
     * 匹配匹配并提取url
     * 格式: xxxx://xxx.xxx.xxx.xx/xxx.xxx?xxx=xxx
     * 匹配 : http://www.suncer.com 或news://www
     * 提取(MatchResult matchResult=matcher.getMatch()): 
     * matchResult.group(0)=http://www.suncer.com:8080/index.html?login=true 
     * matchResult.group(1)=http 
     * matchResult.group(2)=www.suncer.com 
     * matchResult.group(3)=:8080
     * matchResult.group(4)=/index.html?login=true
     * 不匹配: c:\window
     */
    public static final String url_regexp = "(\\w+)://([^/:]+)(:\\d*)?([^#\\s]*)";

    /**
     * 匹配并提取http
     * 格式: http://xxx.xxx.xxx.xx/xxx.xxx?xxx=xxx 或 ftp://xxx.xxx.xxx 或 https://xxx
     * 匹配 : http://www.suncer.com:8080/index.html?login=true
     * 提取(MatchResult matchResult=matcher.getMatch()): 
     * matchResult.group(0)=http://www.suncer.com:8080/index.html?login=true 
     * matchResult.group(1)=http 
     * matchResult.group(2)=www.suncer.com 
     * matchResult.group(3)=:8080
     * matchResult.group(4)=/index.html?login=true
     * 不匹配: news://www
     */
    public static final String http_regexp = "(http|https|ftp)://([^/:]+)(:\\d*)?([^#\\s]*)";

    /**
     * 功能描述:是否为空白,包括null和""
     * @param str
     * @return
     */
    public static boolean isBlank(String strIn) {
        return strIn == null || strIn.trim().length() == 0;
    }

    /**
     * 功能描述:判断是否为质数
     * @param x
     * @return
     */
    public static boolean isPrime(int x) {
        if (x <= 7) {
            if (x == 2 || x == 3 || x == 5 || x == 7)
                return true;
        }
        int c = 7;
        if (x % 2 == 0)
            return false;
        if (x % 3 == 0)
            return false;
        if (x % 5 == 0)
            return false;
        int end = (int) Math.sqrt(x);
        while (c <= end) {
            if (x % c == 0) {
                return false;
            }
            c += 4;
            if (x % c == 0) {
                return false;
            }
            c += 2;
            if (x % c == 0) {
                return false;
            }
            c += 4;
            if (x % c == 0) {
                return false;
            }
            c += 2;
            if (x % c == 0) {
                return false;
            }
            c += 4;
            if (x % c == 0) {
                return false;
            }
            c += 6;
            if (x % c == 0) {
                return false;
            }
            c += 2;
            if (x % c == 0) {
                return false;
            }
            c += 6;
        }
        return true;
    }

    /**
    * 验证字符串是否匹配相应格式
    * 
    * @param  String strIn 需要验证的字符串
    * @param  String patter验证格式
    * @return 是否合法
    * @throws Exception 
    */
    public static boolean testString(String strIn, String patter) {
        try {
            if (isBlank(strIn)) {
                return false;
            }
            Pattern pattern = Pattern.compile(patter);
            Matcher mat = pattern.matcher(strIn);
            if (!mat.find()) {
                return false;
            }
            return true;
        } catch (Exception ee) {
            return false;
        }
    }

    /**
     * 验证字符串是否匹配相应格式
     * 
     * @param  String strIn 需要验证的字符串
     * @param  String patter验证格式
     * @return 是否合法
     * @throws Exception 
     */
    public static boolean regexString(String strIn, String patter) {
        try {
            if (isBlank(strIn)) {
                return false;
            }
            Pattern pattern = Pattern.compile(patter);
            Matcher matcher = pattern.matcher(strIn);
            return matcher.matches();
        } catch (Exception ee) {
            return false;
        }
    }
    
    
    /**
     * 判断是否有emoji表情
     *@description
     *@param source
     *@return
     *@author  qiujy 
     *@date 2017年8月7日 下午2:01:13 
     *@version 3.0
     */
    public static boolean containsEmoji(String source) {  
        int len = source.length();  
  
        for (int i = 0; i < len; i++) {  
            char codePoint = source.charAt(i);  
  
            if (isEmojiCharacter(codePoint)) {  
                // do nothing,判断到了这里表明,确认有表情字符  
                return true;  
            }  
        }  
        return false;  
    }  
    
    private static boolean isEmojiCharacter(char codePoint) {  
        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)  
                || (codePoint == 0xD)  
                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))  
                || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))  
                || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));  
    }  

}

 

posted @ 2018-08-02 14:34  yi点黑暗  阅读(397)  评论(0编辑  收藏  举报