在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
1. https://blog.csdn.net/leansmall/article/details/46404121
原文地址:https://www.cnblogs.com/east7/p/12215829.html
时间: 2024-11-10 01:16:53