常用的正則匹配
/**
* 判斷是否是可以訪問的鏈接
*
* @deprecated 不能滿足頭像URL判斷規則,可能URL過長導致ANR
* @param str
* @return
*/
public static boolean isURL(String str) {
Pattern pattern = Pattern.compile("^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]://)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+$");
return pattern.matcher(str).matches();
}
/**
* 驗證中國手機格式
*/
public static boolean isChineseMobile(String number) {
/*
移動:134、135、136、137、138、139、150、151、152、157(TD)、158、159、178(新)、182、184、187、188
聯通:130、131、132、152、155、156、185、186
電信:133、153、170、173、177、180、181、189、(1349衛通)
總結起來就是第一位必定爲1,第二位必定爲3或5或8,其他位置的可以爲0-9
*/
String num = "[1][34578]\\d{9}";//"[1]"代表第1位爲數字1,"[34578]"代表第二位可以爲3、4、5、7、8中的一個,"\\d{9}"代表後面是可以是0~9的數字,有9位。
Pattern pattern = Pattern.compile(num);
matcher = pattern.matcher(number);
if (TextUtils.isEmpty(number)) {
return false;
} else {
//matches():字符串是否在給定的正則表達式匹配
return matcher.matches();
}
}
/**
* 是否有特殊字符 ((?=[\x21-\x7e]+)[^A-Za-z0-9])
*
* @param content
* @return
*/
public static boolean specicalCharaters(String content) {
Log.d(TAG, "specicalCharaters: " + content);
String reg = "((?=[\\x21-\\x7e]+)[^A-Za-z0-9])+";
Pattern pattern = Pattern.compile(reg);
matcher = pattern.matcher(content);
//matcher.matches()爲全部匹配,只有全部都是特殊字符纔會返回true
//matcher.find()爲部分匹配,只要含有特殊字符就會返回true
return matcher.find();
}
/**
* 是否含有Emoji表情
*
* @param content
* @return
*/
public static boolean hasEmoji(String content) {
int len = content.length();
for (int i = 0; i < len; i++) {
//將字符串拆開來校驗
if (isEmojiCharacter(content.charAt(i))) {
return true;
}
}
return false;
}
/**
* 判斷是否是Emoji表情
*
* @param codePoint
* @return
*/
private static boolean isEmojiCharacter(char codePoint) {
return !(codePoint == 0x0 || codePoint == 0x9 || codePoint == 0xA || codePoint == 0xD || codePoint >= 0x20 && codePoint <= 0xD7FF || codePoint >= 0xE000 && codePoint <= 0xFFFD);
}