当前位置: 首页 > news >正文

user-agent 验证移动端请求

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

user-agent 验证移动端请求


import org.apache.commons.lang.StringUtils;

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

/**
 * 检测终端请求是否来源于移动端
 * @author FanWeiJie
 * @date 2017-02-23 16:44:52
 **/
public class CheckMobile {

    /***
     * \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔), 字符串在编译时会被转码一次,所以是 "\\b"
     * 
     * \B 是单词内部逻辑间隔(连着的两个字母字符之间的逻辑上的间隔)
     **/
    static 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"; 
    static String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser" + "|[1-4    [0-9]{2}x[1-4][0-9]{2})\\b";    
    static Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE);
    static Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE);   
    /**
     * 检测是否是移动设备访问
     * @param userAgent 访问浏览器
     * @return 是否移动设备访问,true:是,false:否
     */
    public static boolean check(String userAgent) {
        if (StringUtils.isBlank(userAgent)) {
            return false;
        }   
        Matcher matcherPhone = phonePat.matcher(userAgent);
        Matcher matcherTable = tablePat.matcher(userAgent);
        if (matcherPhone.find() || matcherTable.find()) {
            return true;
        } else {
            return false;
        }
    }
}

https://www.fank243.com/posts/dd36f32d.html

转载于:https://my.oschina.net/skyAcross/blog/1790254

相关文章:

  • python用zipfile模块打包文件或是目录、解压zip文件实例
  • 模块化(学习笔记)
  • HDU 4048 Zhuge Liang's Stone Sentinel Maze [组合数学+Burnside]
  • swap file *.swp already exists问题解决!!!
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • Eclipse开发环境配置,打磨Eclipse,安装插件(适用3.4,3.5,3.6,3.7)
  • 八、Maven下进行单元测试
  • Java反编译利器-Jad, Jode, Java Decompiler等及其IDE插件
  • 在阿里云创建子域名,配置nginx,使用pm2部署node项目到ubuntu服务器
  • 求数组中只出现一次的数字(算法)
  • 黄聪:公众号怎么用微信做出点击此处查看答案
  • 远程调用
  • Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)
  • 超强大的响应式图表工具 (Echarts)
  • 4-8Expect实现批量主机公钥推送
  • $translatePartialLoader加载失败及解决方式
  • CODING 缺陷管理功能正式开始公测
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • EOS是什么
  • java取消线程实例
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PAT A1017 优先队列
  • springboot_database项目介绍
  • SQL 难点解决:记录的引用
  • Vue组件定义
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 编写高质量JavaScript代码之并发
  • 成为一名优秀的Developer的书单
  • 初探 Vue 生命周期和钩子函数
  • 对象管理器(defineProperty)学习笔记
  • 复习Javascript专题(四):js中的深浅拷贝
  • 深入 Nginx 之配置篇
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #pragma once
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1)(1.11) SiK Radio v2(一)
  • (4)Elastix图像配准:3D图像
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)共用体union的用法举例
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八十八)VFL语言初步 - 实现布局
  • (办公)springboot配置aop处理请求.
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (图)IntelliTrace Tools 跟踪云端程序
  • (小白学Java)Java简介和基本配置
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转) ns2/nam与nam实现相关的文件
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统