天天看點

Java根據UA判斷手機,平闆,PC登入

/**
	 * 校驗是否手機端
	 * @param request
	 * @return
	 */
	public boolean isFromMobile(HttpServletRequest request) {
		//1. 獲得請求UA
		String userAgent = request.getHeader("USER-AGENT").toLowerCase();
		
		//2.聲明手機和平闆的UA的正規表達式
		// \b 是單詞邊界(連着的兩個(字母字元 與 非字母字元) 之間的邏輯上的間隔),
		// 字元串在編譯時會被轉碼一次,是以是 "\\b"
		// \B 是單詞内部邏輯間隔(連着的兩個字母字元之間的邏輯上的間隔)
		String phoneReg = "\\b(ip(hone|od)|android|opera m(ob|in)i" + "|windows (phone|ce)|blackberry"
				+ "|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp" + "|laystation portable)|nokia|fennec|htc[-_]"
				+ "|mobile|up.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";
		String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser" + "|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";

		// 3.移動裝置正則比對:手機端、平闆
		Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE);
		Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE);
		if (null == userAgent) {
			userAgent = "";
		}
		// 4.比對
		Matcher matcherPhone = phonePat.matcher(userAgent);
		Matcher matcherTable = tablePat.matcher(userAgent);
		if (matcherPhone.find() || matcherTable.find()) {
			return true; //來自手機或者平闆
		} else {
			return false; //來自PC
		}
	}