Typescript 常用的过滤正则表达式

510 阅读1分钟
/**
 * 只充许输入正数
 * @param $event 字符串
 * @param fixed 保留位数
 * @returns
 */
export function allowPlus($event: string, fixed = 2):string {
    $event = $event.replace(/\s/gi, '').replace(/[^\d.]/gi, ``);
    if ($event.length >= 2 && $event[0] === '0' && $event[1] !== '.') {
        $event = $event.substring(1, $event.length);
    }
    const points = $event.match(/\./gi) || [];
    if ($event[$event.length - 1] === '.' && points.length >= 2) {
        $event = $event.substring(0, $event.length - 1);
    }

    if ($event[0] === '.') {
        $event = $event.substring(0, 1);
    }

    if ($event.indexOf('.') >= 1) {
        const $eventArr = $event.split('.');
        $event = parseInt($eventArr[0], 10) + '.' + $eventArr[1].substring(0, 2);
    } else {
        $event = parseInt($event, 10) + '';
        $event === 'NaN' && ($event = '');
    }
    return $event;
}

/**
 * 只许输入中英文空格
 * @param $event
 */
export function allowChineseEnglish($event: string) {
    return $event.replace(/[^\u4e00-\u9fa5\sA-Za-z]/g, ``);
}


/**
 * 邮箱验证
 * @param text 输出信息
 */
export function matchEmail(text: string) {
    return (rule: ruleValidate, value: string, callback: (res:Error | undefined) => void ) => {
        const reg = /^([a-zA-Z]|[0-9])(\w|-|\.)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
        if (!value.match(reg)) {
            callback(new Error(text));
            return;
        }
        callback(undefined);
    };
}


/**
 * 手机号码
 * @param text 输出信息
 */
export function matchPhone(text: string) {
    return (rule: ruleValidate, value: string, callback: (res:Error | undefined) => void ) => {
        const reg = /^(1[3-9])\d{9}$/;
        if (!value.match(reg)) {
            callback(new Error(text));
            return;
        }
        callback(undefined);
    };
}


/**
 * 密码
 * @param text 输出信息
 */
export function matchPwd(text?: string) {
    return (rule: ruleValidate, value: string, callback: (res:Error | undefined) => void ) => {
        const bits = 8;
        if (value.length < bits) {
            callback(new Error(text || '密码最小必须是8位'));
            return;
        }
        if (!value.match(/[a-z]/g) || !value.match(/[A-Z]/g) || !value.match(/[0-9]/g)) {
            callback(new Error(text || '密码必须包含大小写字母与数字'));
            return;
        }
        callback(undefined);
    };
}


/**
 * 只许输入数字英文
 * @param $event
 */
export function allowEnglishNumber($event: string) {
    return $event.replace(/[^A-Za-z\d]/g, ``);
}

/**
 * 时间格式化
 */
export function formatDate(value?: string | null | undefined | number | Date, style = 'yyyy-MM-dd hh:mm:ss' ) : string {
    if (!value) {
        value = new Date();
    } else {
        value = new Date(value);
    }
    let date: string = value.toLocaleString();
    date = date.replace(/[: ]/ig, '/');
    const dateArr = date.split('/');
    if ( Number(dateArr[1]) <= 9) {
        dateArr[1] = `0${dateArr[1]}`;
    }
    if ( Number(dateArr[2]) <= 9) {
        dateArr[2] = `0${dateArr[2]}`;
    }

    return style.replace('yyyy', dateArr[0])
        .replace('MM', dateArr[1])
        .replace('dd',  dateArr[2])
        .replace('hh',  dateArr[3])
        .replace('mm',  dateArr[4])
        .replace('ss',  dateArr[5]);
};

判断数据类型

Object.prototype.toString.call(null).slice(6, -1) // Null
Object.prototype.toString.call(undefined).slice(6, -1) // Undefined
Object.prototype.toString.call(0).slice(6, -1) // Number
Object.prototype.toString.call(-1).slice(6, -1) // Number
Object.prototype.toString.call(1).slice(6, -1) // Number
Object.prototype.toString.call(1.1).slice(6, -1) // Number
Object.prototype.toString.call([]).slice(6, -1) // Array
Object.prototype.toString.call(Promise).slice(8, -1); // Function
Object.prototype.toString.call(new Date()).slice(8, -1) // Date