test 规则校验

test 规则校验

里面有一些常用的规则校验 如是否手机号,邮箱号,URL 等

首先引入

1
2
3
4
//main.js

import test from './common/test.js'
Vue.prototype.$test = test

是否验证码

code(value, len = 6)

校验是否验证码(要求为数字),返回true或者false

  • value 验证码字符串
  • len 验证码长度,默认为 6
1
console.log(this.$test.code('4567', 4))

是否数组

array(array)

校验是否数组,返回true或者false

  • array 数组
1
console.log(this.$test.array([1, 2, 3]))

是否 Json 字符串

jsonString(json)

校验是否Json,返回true或者false

  • json Json 字符串

注意:请留意json字符串的要求:

  1. 整体为一个字符串
  2. 字符串对象内的属性需要用""双引号包含
1
console.log(this.$test.jsonString('{"a": 1}'))

是否对象

object(object)

校验是否对象,返回true或者false

  • object 对象

    注意:请留意json字符串的要求:

    1. 整体为一个字符串
    2. 字符串对象内的属性需要用""双引号包含
    1
    console.log(this.$test.object({ a: 1 }))

    是否邮箱号

    email(email)

    校验是否邮箱号,返回true或者false

    • email 字符串
    1
    console.log(this.$test.email('123465798@gmail.com'))

    是否手机号

    mobile(mobile)

    校验是否手机号,返回true或者false

    • mobile 字符串
    1
    console.log(this.$test.mobile('13845678900'))

    是否 URL

    url(url)

    校验是否 URL 链接,返回true或者false

    • url 字符串
    1
    console.log(this.$test.url('http://www.baidu.com'))

    是否为空

    这里指的“空”,包含如下几种情况:

    • 值为undefined(一种类型),非字符串”undefined
    • 字符串长度为0,也即空字符串
    • 值为false(布尔类型),非字符串”false
    • 值为数值0(非字符串”0“),或者NaN
    • 值为null,空对象{},或者长度为0的数组

    isEmpty(value)

    校验值是否为空,返回true或者false
    此方法等同于empty名称,但是为了更语义化,推荐用isEmpty名称。

    • value 字符串
    1
    console.log(this.$test.isEmpty(false))

    是否普通日期

    验证一个字符串是否日期,返回true或者false,如下行为正确

    • 2020-02-102020-02-10 08:32:102020/02/10 3:102020/02/10 03:102020/02-10 3:10

    如下为错误:

    • 2020年02月10日、2020-02-10 25:32

    总的来说,年月日之间可以用”/“或者”-“分隔(不能用中文分隔),时分秒之间用”:”分隔,数值不能超出范围,如月份不能为 13,则检验成功,否则失败。

    date(date)

    • date 日期字符串
    1
    console.log(this.$test.date('2020-02-10 08:32:10'))

    是否十进制数值

    整数,小数,负数,带千分位数(2,359.08)等可以检验通过,返回true或者false

    number(number)

    • number 数字
    1
    console.log(this.$test.number('2020'))

    是否整数

    所有字符都在0-9之间,才校验通过,结果返回true或者false

    digits(number)

    • number 数字
    1
    console.log(this.$test.digits('2020'))

    是否身份证号

    身份证号,包括尾数为”X”的类型,可以校验通过,结果返回true或者false

    idCard(idCard)

    • idCard 身份证号
    1
    console.log(this.$test.idCard('110101199003070134'))

    是否车牌号

    可以校验旧车牌号和新能源类型车牌号,结果返回true或者false

    carNo(carNo)

    • carNo 车牌号
    1
    console.log(this.$test.carNo('京A88888'))

    是否金额

    最多两位小数,可以带千分位,结果返回true或者false

    amount(amount)

    • amount 金额字符串
    1
    console.log(this.$test.amount('3,233.08'))

    是否字母或者数字

    只能是字母或者数字,结果返回true或者false

    enOrNum(str)

    • str 字母或者数字字符串
    1
    console.log(this.$test.enOrNum('sas'))

    是否包含某个值

    字符串中是否包含某一个子字符串,区分大小写,结果返回true或者false

    contains(str, subStr)

    • str 字母或者数字字符串
    • subStr 子字符串
    1
    console.log(this.$test.contains('sas', 'sa'))

    数值是否在某个范围内

    如 30 在”29-35”这个范围内,不在”25-28”这个范围内,结果返回true或者false

    range(number, range)

    • number 数值
    • range 如”[25-35]”
    1
    console.log(this.$test.range(35, [30, 34]))

    字符串长度是否在某个范围内

    如”abc“长度为 3,范围在”2-5”这个区间,结果返回true或者false

    rangeLength(str, range)

    • str 数值
    • range 如”[25-35]”
    1
    console.log(this.$test.rangeLength('abc', [3, 10]))
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    /**
    * 验证电子邮箱格式
    */
    function email(value) {
    return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value)
    }

    /**
    * 验证手机格式
    */
    function mobile(value) {
    return /^1[23456789]\d{9}$/.test(value)
    }

    /**
    * 验证URL格式
    */
    function url(value) {
    return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(
    value
    )
    }

    /**
    * 验证日期格式
    */
    function date(value) {
    return !/Invalid|NaN/.test(new Date(value).toString())
    }

    /**
    * 验证ISO类型的日期格式
    */
    function dateISO(value) {
    return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)
    }

    /**
    * 验证十进制数字
    */
    function number(value) {
    return /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value)
    }

    /**
    * 验证整数
    */
    function digits(value) {
    return /^\d+$/.test(value)
    }

    /**
    * 验证身份证号码
    */
    function idCard(value) {
    return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)
    }

    /**
    * 是否车牌号
    */
    function carNo(value) {
    // 新能源车牌
    const xreg =
    /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/
    // 旧车牌
    const creg =
    /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
    if (value.length === 7) {
    return creg.test(value)
    } else if (value.length === 8) {
    return xreg.test(value)
    } else {
    return false
    }
    }

    /**
    * 金额,只允许2位小数
    */
    function amount(value) {
    //金额,只允许保留两位小数
    return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value)
    }

    /**
    * 中文
    */
    function chinese(value) {
    let reg = /^[\u4e00-\u9fa5]+$/gi
    return reg.test(value)
    }

    /**
    * 只能输入字母
    */
    function letter(value) {
    return /^[a-zA-Z]*$/.test(value)
    }

    /**
    * 只能是字母或者数字
    */
    function enOrNum(value) {
    //英文或者数字
    let reg = /^[0-9a-zA-Z]*$/g
    return reg.test(value)
    }

    /**
    * 验证是否包含某个值
    */
    function contains(value, param) {
    return value.indexOf(param) >= 0
    }

    /**
    * 验证一个值范围[min, max]
    */
    function range(value, param) {
    return value >= param[0] && value <= param[1]
    }

    /**
    * 验证一个长度范围[min, max]
    */
    function rangeLength(value, param) {
    return value.length >= param[0] && value.length <= param[1]
    }

    /**
    * 是否固定电话
    */
    function landline(value) {
    let reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
    return reg.test(value)
    }

    /**
    * 判断是否为空
    */
    function empty(value) {
    switch (typeof value) {
    case 'undefined':
    return true
    case 'string':
    if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true
    break
    case 'boolean':
    if (!value) return true
    break
    case 'number':
    if (0 === value || isNaN(value)) return true
    break
    case 'object':
    if (null === value || value.length === 0) return true
    for (var i in value) {
    return false
    }
    return true
    }
    return false
    }

    /**
    * 是否json字符串
    */
    function jsonString(value) {
    if (typeof value == 'string') {
    try {
    var obj = JSON.parse(value)
    if (typeof obj == 'object' && obj) {
    return true
    } else {
    return false
    }
    } catch (e) {
    return false
    }
    }
    return false
    }

    /**
    * 是否数组
    */
    function array(value) {
    if (typeof Array.isArray === 'function') {
    return Array.isArray(value)
    } else {
    return Object.prototype.toString.call(value) === '[object Array]'
    }
    }

    /**
    * 是否对象
    */
    function object(value) {
    return Object.prototype.toString.call(value) === '[object Object]'
    }

    /**
    * 是否短信验证码
    */
    function code(value, len = 6) {
    return new RegExp(`^\\d{${len}}$`).test(value)
    }

    export default {
    email,
    mobile,
    url,
    date,
    dateISO,
    number,
    digits,
    idCard,
    carNo,
    amount,
    chinese,
    letter,
    enOrNum,
    contains,
    range,
    rangeLength,
    empty,
    isEmpty: empty,
    jsonString,
    landline,
    object,
    array,
    code,
    }