在Java中判斷某一字符串是否為純英文、純數字、英文和數字的組合等時,通常使用正則str.matches匹配,告訴這個字符串是否與給定的正則表達式匹配。
- 各種字符的unicode編碼的范圍:
- 漢字:[0x4e00,0x9fa5](或十進制[19968,40869])
- 數字:[0x30,0x39](或十進制[48, 57])
- 小寫字母:[0x61,0x7a](或十進制[97, 122])
- 大寫字母:[0x41,0x5a](或十進制[65, 90])
import java.util.regex.Matcher; import java.util.regex.Pattern; public class StrValidate { // 純數字
private static String DIGIT_REGEX = "[0-9]+"; // 含有數字
private static String CONTAIN_DIGIT_REGEX = ".*[0-9].*"; // 純字母
private static String LETTER_REGEX = "[a-zA-Z]+"; // 包含字母
private static String CONTAIN_LETTER_REGEX = ".*[a-zA-z].*"; // 純中文
private static String CHINESE_REGEX = "[\u4e00-\u9fa5]"; // 僅僅包含字母和數字
private static String LETTER_DIGIT_REGEX = "^[a-z0-9A-Z]+$"; private static String CHINESE_LETTER_REGEX = "([\u4e00-\u9fa5]+|[a-zA-Z]+)"; private static String CHINESE_LETTER_DIGIT_REGEX = "^[a-z0-9A-Z\u4e00-\u9fa5]+$"; /** * 判斷字符串是否僅含有數字和字母 * * @param str * @return
*/
public static boolean isLetterDigit(String str) { return str.matches(LETTER_DIGIT_REGEX); } /** * 是否為漢字,不包括標點符號 * * @param con * @return true 是漢字 */
public static boolean isChinese(String con) { Pattern pattern = Pattern.compile(CHINESE_REGEX); for (int i = 0; i < con.length(); i = i + 1) { if (!pattern.matcher( String.valueOf(con.charAt(i))).find()) { return false; } } return true; } /** * 用正則表達式判斷字符串中是否 * 僅包含英文字母、數字和漢字 * * @param str * @return
*/
public static boolean isLetterDigitOrChinese(String str) { return str.matches(CHINESE_LETTER_DIGIT_REGEX); } /** * 姓名中可包含漢字和字母,無其它字符 * * @param passengerName * @return
*/
public static boolean checkChineseLetter(String passengerName) { Pattern pattern = Pattern.compile(CHINESE_LETTER_REGEX); Matcher matcher = pattern.matcher(passengerName); if (matcher.matches()) { //不包含特殊字符
return true; } else { //包含了特殊字符
return false; } } /** * 判斷一個字符串是否包含標點符號(中文或者英文標點符號),true 包含。<br/> * 原理:對原字符串做一次清洗,清洗掉所有標點符號。<br/> * 此時,如果入參 ret 包含標點符號,那么清洗前后字符串長度不同,返回true;否則,長度相等,返回false。<br/> * * @param ret * @return true 包含中英文標點符號 */
public static boolean checkPunctuation(String ret) { boolean b = false; String tmp = ret; // replaceAll里面的正則匹配可以清空字符串中的中英文標點符號,只保留數字、英文和中文。
tmp = tmp.replaceAll("\\p{P}", ""); if (ret.length() != tmp.length()) { b = true; } return b; } public static boolean isDigit(String ret) { return ret.matches(DIGIT_REGEX); } public static boolean isLetter(String ret) { return ret.matches(LETTER_REGEX); } public static boolean hasDigit(String ret) { return ret.matches(CONTAIN_DIGIT_REGEX); } public static boolean hasLetter(String ret) { return ret.matches(CONTAIN_LETTER_REGEX); } public static void main(String[] args) { // System.out.println(isLetterDigitOrChinese("33dd33") + " ------- 麥迪娜·買買提 ---------"); // System.out.println(isChinese("麥迪娜·買買提")); // System.out.println(isChinese("這個X") + " checkChineseLetter "); // System.out.println(isChinese("checkChineseLetter")); // System.out.println(isChinese("checkChineseLetter3")); System.out.println(hasDigit("99999")); System.out.println(hasDigit("9999舅舅9")); } }
Reference
