js和node中的正则验证总结

在做前端的过程中经常遇到各类验证, 本文记录了利用正则进行常规的表单验证, 以及对客户端的判断.

正文

  • 表单正则判断

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    var validateReg = {
    "only_chinese_english": /^\+?[a-zA-z\u4e00-\u9fa5 ]*$/ /** 输入中文或英文字符,不允许特殊字符 **/
    , "double_byte": /^[\u0000-\u00ff]$/ /** 双字节字符 **/
    , "p_int": /^[1-9]*[1-9][0-9]*$/ /** 正整数 **/
    , "p_num_top_0": /^\d+(?=\.{0,1}\d+$|$)/ /** 大于零的数 **/
    , "tel": /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/ /** "021-60825088","0427-7531992","76423865" **/
    , "phone": /^1[3|4|5|7|8][0-9]{9}$/ /** 15120007555 **/
    , "email": /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/ /** oulafen@gmail.com **/
    , "url": /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/ /** http://blog.oulafen.com **/
    , "IP": /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ /** 192.168.25.103 **/
    }
    //验证邮箱
    validateReg.email.test('oulafen@qq.com');
    //获取字符长度
    function getByteNum(str) {
    var bytesCount = 0;
    for (var i = 0; i < str.length; i++) {
    var c = str.charAt(i);
    if (validateReg.double_byte.test(c)){ //匹配双字节
    bytesCount += 1;
    }else {
    bytesCount += 2;
    }
    }
    return bytesCount;
    }
  • 客户端判断之javascript

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    var browser = {
    "versions": function() {
    var u = navigator.userAgent,
    ua = navigator.userAgent.toLowerCase();
    return { //移动终端浏览器版本信息
    trident: u.indexOf('Trident') > -1, //IE内核
    presto: u.indexOf('Presto') > -1, //opera内核
    webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
    mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
    android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
    iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
    iPad: u.indexOf('iPad') > -1, //是否iPad
    webApp: u.indexOf('Safari') == -1 ,//是否web应该程序,没有头部与底部
    wechat:ua.match(/MicroMessenger/i) == "micromessenger",//微信
    weibo:ua.match(/WeiBo/i) == "weibo",//微博
    qq:ua.match(/QQ/i) == "qq"//qq
    };
    }(),
    "language": (navigator.browserLanguage || navigator.language).toLowerCase()
    };
  • 客户端判断之nodejs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    var browser= function(req) {
    var u = req.headers['user-agent'];
    var ua = u.toLowerCase();
    //移动终端浏览器版本信息
    return {
    trident: u.indexOf('Trident') > -1, //IE内核
    presto: u.indexOf('Presto') > -1, //opera内核
    webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
    mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
    android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
    iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
    iPad: u.indexOf('iPad') > -1, //是否iPad
    webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
    wechat: ua.match(/MicroMessenger/i) == "micromessenger",//微信
    weibo: ua.match(/WeiBo/i) == "weibo",//微博
    qq: ua.match(/QQ/i) == "qq"//QQ空间
    };
    };
    exports.browser=browser;