package cn.celess.common.util;

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

/**
 * @author : xiaohai
 * @date : 2019/05/12 11:04
 */
public class RegexUtil {
    /**
     * 网址匹配
     *
     * @param url
     * @return
     */
    public static boolean urlMatch(String url) {
        if (url == null || url.replaceAll(" ", "").isEmpty()) {
            return false;
        }
        //正则 （http(s)://www.celess/xxxx,www.celess.cn/xxx）
        String pattern = "^(http://|https://|)([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$";
        return match(url, pattern);
    }

    /**
     * 邮箱验证
     *
     * @param email
     * @return
     */
    public static boolean emailMatch(String email) {
        if (email == null || email.replaceAll(" ", "").isEmpty()) {
            return false;
        }
        //正则
        String pattern = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
        return match(email, pattern);
    }

    /**
     * 手机号匹配
     *
     * @param phone
     * @return
     */
    public static boolean phoneMatch(String phone) {
        if (phone == null || phone.replaceAll(" ", "").isEmpty()) {
            return false;
        }
        //正则
        String pattern = "^([1][3,4,5,6,7,8,9])\\d{9}$";
        return match(phone, pattern);
    }

    /**
     * 密码正则
     * 最短6位，最长16位 {6,16}
     * 可以包含小写大母 [a-z] 和大写字母 [A-Z]
     * 可以包含数字 [0-9]
     * 可以包含下划线 [ _ ] 和减号 [ - ]
     *
     * @param pwd
     * @return
     */
    public static boolean pwdMatch(String pwd) {
        if (pwd == null || pwd.replaceAll(" ", "").isEmpty()) {
            return false;
        }
        //正则
        String pattern = "^[\\w_-]{6,16}$";
        return match(pwd, pattern);
    }

    private static boolean match(String str, String pattern) {
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(str);
        return m.matches();
    }
}
