原创

常用正则

安全网络 正则验证

前置

 1. IPaddr 地址验证插件 需要安装 npm i ipaddr.js 

 2. 字符长度验证

export function regCode(str: string, len: number) {

    let i: number = 0;

    let totalLength: number = 0;

    /\* 计算utf-8编码情况下的字符串长度 \*/

    for (i = 0; i < str.length; i++) {

        if (str.charCodeAt(i) <= parseInt('0x7F')) {

            totalLength += 1;

        } else if (str.charCodeAt(i) <= parseInt('0x7FF')) {

            totalLength += 2;

        } else if (str.charCodeAt(i) <= parseInt('0xFFFF')) {

            totalLength += 3;

        } else if (str.charCodeAt(i) <= parseInt('0x1FFFFF')) {

            totalLength += 4;

        } else if (str.charCodeAt(i) <= parseInt('0x3FFFFFF')) {

            totalLength += 5;

        } else {

            totalLength += 6;

        }

    }

    if (totalLength > len) {

        return false;

    } else {

        return true;

    }

}

ip地址 字符长度 端口号正则校验 typescript, element-ui

import { checkEmail, checkPhone, isValidIP, regCode } from '@/utils/index';

import IPaddr from 'ipaddr.js';



/\*\*

 \* validate device name

 \* 验证设备名称

 \* max 2-20个字符 | required

 \*/

export function validateDeviceName(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback('请输入设备名称');

    } else if (regCode(value, 1) || !regCode(value, 20)) {

        callback('设备名称为2-20个字符');

    } else {

        callback();

    }

}



/\*\*

 \* validate device desc

 \* 描述

 \* max 200个字符 | 非必填

 \*/

export function validateDeviceDesc(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback();

    } else if (!regCode(value, 200)) {

        callback('最大输入为200个字符');

    }

}



/\*\*

 \* 风险规则校验 {描述、补救建议}

 \*/

export function validateDeviceDesc500(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback();

    } else if (!regCode(value, 500)) {

        callback('最大输入为500个字符');

    }

}



/\*\*

 \* validate IPv4

 \* 验证IPv4地址

 \* required

 \*/

export function validateIPv4(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback('IP不能为空');

    } else if (isValidIP(value)) {

        callback('请输入正确的IPv4地址');

    } else if (!IPaddr.IPv4.isIPv4(value)) {

        callback('请输入正确的IPv4地址');

    } else {

        callback();

    }

}



/\*\*

 \* validate port

 \* 验证端口号

 \* 1 ~ 65535 required

 \*/

export function validatePort(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback('端口号不能为空');

    } else if (value > 65535 || value < 1) {

        callback('请输入正确的端口号1-65535之间');

    } else {

        callback();

    }

}



/\*\*

 \* validate login name

 \* 验证设备登录方式 用户名

 \* max 100 required

 \*/



export function validateDeviceLoginName(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback('用户名不能为空');

    } else if (!regCode(value, 100)) {

        callback('用户名最大可输入100个字符');

    } else {

        callback();

    }

}



/\*\*

 \* validate email

 \* 验证邮箱

 \* max 30

 \* email has @

 \*/

export function validateEmail(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback();

    } else {

        if (checkEmail(value)) {

            callback('请输入正确的邮箱格式');

        } else if (!regCode(value, 30)) {

            callback('邮箱最大可输入30个字符');

        } else {

            callback();

        }

    }

}



/\*\*

 \* validate phone

 \* 验证手机号

 \* max 30

 \* phone length 11

 \*/

export function validatePhone(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback();

    } else {

        if (checkPhone(value)) {

            callback('请输入正确的手机号');

        } else if (!regCode(value, 30)) {

            callback('手机号最大可输入30个字符');

        } else {

            callback();

        }

    }

}



/\*\*

 \* validate code length

 \* 验证字符长度

 \* max 30

 \*/

export function validateMax30(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback();

    } else {

        if (!regCode(value, 30)) {

            callback('最大可输入30个字符');

        } else {

            callback();

        }

    }

}



/\*\*

 \* 风险规则校验名称

 \*/

export function validateMax50(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback();

    } else {

        if (!regCode(value, 50)) {

            callback('最大可输入50个字符');

        } else {

            callback();

        }

    }

}



/\*\*

 \* validate ip

 \* 验证IP 支持如下

 \* 1.1.1.1

 \* 2.2.2.0/24

 \* 3.3.3.10-3.3.3.20

 \* any

 \*/

export function validateIp(rule: any, value: any, callback: any): any {

    if (value === '') {

        callback('IP地址不能为空');

    } else if (value.split('\n').length > 100) {

        callback();

    } else {

        if (!validateIPAddr(value)) {

            callback('请输入正确的IP地址');

        } else {

            callback();

        }

    }

}



export function validateIPAddr(value: string) {

    let reg = /(^(\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])$)|(^any$)|(^(\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])\/(\d|[0-2]\d|3[0-2])$)|(^(\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])-(\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])$)/;

    let len = value.split('\n');

    for (let i of len) {

        if (!reg.test(i)) {

            return false;

            break;

        }

    }

    return true;

}





/\*\*

 \* validate ip

 \* 验证端口号 支持如下

 \* 目的端口 { TCP | UDP } 1-65535 ==> targetPort

 \* 80

 \* 443

 \* 8080-9090

 \*

 \* 目的端口 { OTHER } 0-255 ==> targetOthe

 \* 15

 \* 125

 \* 133-155

 \*/

export function validateTargetPort(value: string) {

    /\*\*

     \* 1. 4位及以下最大 9999 \d{4}

     \* 2. 5位 59999 [0-5]\d{4}

     \* 3. 5位 60000 - 65535 [0-6]

     \*/

    let reg = /(^(\d{4}|[0-5]\d{4}|[0-6][0-5]{2}[0-3][0-5])$)|(^(\d{4}|[0-5]\d{4}|[0-6][0-5]{2}[0-3][0-5])-(\d{4}|[0-5]\d{4}|[0-6][0-5]{2}[0-3][0-5])$)|(^any$)/;

    let len = value.split('\n');

    for (let i of len) {

        if (!reg.test(i)) {

            return false;

            break;

        }

    }

    return true;

}



export function validateTargetOther(value: string) {

    let reg = /(^(\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])$))|(^any$)/;

    let len = value.split('\n');

    for (let i of len) {

        if (!reg.test(i)) {

            return false;

            break;

        }

    }

    return true;

}





/\*\*

 \* validate ipv4 or URL

 \* 验证邮箱或域名

 \* IP { 1.1.1.1 }

 \* 域名 {

 \*  http://dev.360es.com

 \*  https://test-dev.360es.com

 \* }

 \*/

export function validateIPv4orURL(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback('请输入邮件服务器IP或域名');

    } else {

        let reg = /(^(\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])$)|(^(http|https|HTTP|HTTPS):\/\/([\w.-]+\/?)\.([\w.]+\/?)\.([\w.]+\/?)\S\*)/;

        if (!reg.test(value)) {

            callback('请输入正确的服务器IP或域名');

        } else {

            callback();

        }

    }

}





/\*\*

 \* validate addr or service

 \* 地址对象名,

 \* 服务对象名

 \*/

export function validateMin1Max63(rule: any, value: any, callback: any): any {

    if (value == '') {

        callback('对象名不能为空');

    } else if (!regCode(value, 63)) {

        callback('最大可输入63个字符');

    } else {

        callback();

    }

}

验证IP地址 子网 网段 网段对比

/\*\*

 \*  ip 地址验证

 \*/

export function isValidIP(ip: string) {

    let reg = /^(\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])$/;

    return !reg.test(ip);

}



/\*\*

 \* 验证子网

 \*/

export function isVaildSubnet(value: string): boolean {

    let regx = /(^(\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])\/(\d|[0-2]\d|3[0-2])$)/;

    return regx.test(value);

}



/\*\*

 \* 验证网段

 \*/

export function isVaildSegment(value: string): boolean {

    let regx = /(^(\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])-(\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])$)/;

    return regx.test(value);

}



/\*\*

 \* 网段校验比对

 \* @param value

 \*/

export function isValidSegmentComparison(value: string): boolean {

    let start!: string[];

    let end!: string[];

    let source = value.split('-');

    let valid!: boolean;

    start = source[ 0 ].split('.');

    end = source[ 1 ].split('.');

    for (let i = 0; i < start.length; i++) {

        const startElement = start[ i ];

        if (Number(startElement) != Number(end[ i ])) {

            if (Number(startElement) > Number(end[ i ])) {

                valid = false;

                break;

            } else {

                valid = true;

            }

        }

        valid = true;

    }

    return valid;

}

邮箱

checkemail(t){

    let reg = /^([a-zA-Z0-9\_-])+@([a-zA-Z0-9\_-])+((\.[a-zA-Z0-9\_-]{2,3}){1,2})$/;

    return !reg.test(t);

}



checkemail ( v ) {

    let re = /^\w+((-\w+)|(\.\w+))\*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)\*\.[A-Za-z0-9]+$/;

    return !re.test(v)

}

座机号

checktphone(t){

    let re = /^(0[1-9]\d{1,2}-)\d{6,7}$/;

    return !re.test(t);

}

手机号

checkphone(t){

    let re = /^1[0-9]{10}$/;   //let reg = /^1[1-9]{2}[0-9]{8}$/g

    return !re.test(t);

}

验证中文字符

/^[\u4e00-\u9fa5]+$/
匹配双字节字符(包括汉字在内):[^\x00-\xff]
验证数字字母汉字



/^[A-Za-z0-9\u4e00-\u9fa5]+$/  
/\*\*

 \* 验证数字字母下划线连接符

 \* @param t

 \*/

export function checkNumberASymbol(t: string) {

    let reg = /^[A-Za-z0-9-\_]+$/;

    return !reg.test(t);

}
/\*\*

 \* 验证是否含有数字、字母、特殊字符

 \* @param t

 \*/

export function checkPassRxg(t: string) {

    let reg1 = /[0-9]/;

    let reg2 = /[A-Za-z]/;

    let reg3 = /[\W]/;

    let test = reg1.test(t) && reg2.test(t) && reg3.test(t);

    return !test;

}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • javascript 浅拷贝与深拷贝

    深拷贝就是在拷贝数据的时候,将数据的所有引用结构都拷贝一份。简单的说就是,在内存中存在两个数据结构完全相同又相互独立的数据,将引用型类型进行复制,而不是只复制其...

    yangdongnan
  • 使用滴滴mpx 开发一个小程序组件

    yangdongnan
  • vue render jsx 事件绑定 条件渲染 slots 插槽

    yangdongnan
  • 性能监控平台搭建 - Grafana安装与简易使用指南

    Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:

    上帝De助手
  • 线性回归分析

    残差正态性的频率检验是一种很直观的检验方法,其基本思想是将残差落在某范围的频率与正态分布在该范围的概率相比较,通过二者之间偏差大小评估残差的正态性。

    看、未来
  • 5G网络数据中心系统需要什么光模块?

    前些时间也给大家分享了【5G超新时代,点燃了25G和100G光模块市场】这篇文章,感兴趣的朋友可以看看!接下来跟易天光通信(etulink.com)一起看看5G...

    易天光通信
  • 1083 Cantor表

    题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 1/1 1/2 ...

    attack
  • 由sqli-labs-Less17学习增删改形式下的sql注入

    mysql在对数据的处理中有增删改查四个操作。而在sql注入中,往往常见的是 select查询形式。那么insert、delete、update呢?

    Elapse
  • [- Flutter 基础篇 -] ListView的使用

    张风捷特烈
  • 搞嵌入式开发却不会写上位机?来了解下小白的福音Micro-Lab(多个案例带你快速入门)

    Micro-Lab可以称得上是迄今为止最棒的嵌入式调试工具,在调试过程中遇到的所有痛点,在这里都得以解决,并引入了很多新的功能,如串口/网络示波器,串口/网络指...

    morixinguan

扫码关注云+社区

领取腾讯云代金券