正则 数据类型判断
小米糖糖 12/11/2020  regextype
# 元字符
摘抄自 http://www.h-ui.net/Hui-notes-regular.shtml
元字符
| 元字符 | 名称 | 匹配对象 | 
|---|---|---|
| * | 星号 | 零次或多次 | 
| + | 加号 | 一次或多次 | 
| ? | 问号 | 零次或一次 | 
| . | 点号 | 单个任意字符 | 
| [...] | 字符组 | 列出的任意字符 | 
| [^...] | 未列出的任意字符 | |
| ^ | 脱字符 | 行的起始位置 | 
| $ | 美元符 | 行的结束为止 | 
| \< | 反斜线-小于 | 单词的起始位置 | 
| \> | 反斜线-大于 | 单词的结束位置 | 
| | | 竖线 | 或,匹配分割两边的任意一个表达式 | 
| (...) | 括号 | 限制竖线的作用范围。 | 
| \b | 匹配一个单词边界,也就是指单词和空格间的位置。 | |
| \B | 匹配非单词边界。 | |
| \d | 匹配一个数字字符。等价于 [0-9]。 | |
| \D | 匹配一个非数字字符。等价于 [^0-9]。 | |
| \w | 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。 | |
| \W | 匹配非字母、数字、下划线。等价于 '[^a-za-z0-9_]'。 | |
| \f | 匹配一个换页符。等价于 \x0c 和 \cL。 | |
| \n | 匹配一个换行符。等价于 \x0a 和 \cJ。 | |
| \r | 匹配一个回车符。等价于 \x0d 和 \cM。 | |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 | |
| \S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 | |
| \t | 匹配一个制表符。等价于 \x09 和 \cI。 | |
| \v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 | 
# 常用的正则表达式
摘抄自 http://www.h-ui.net/Hui-notes-regular.shtml
常用的正则表达式
// 0 或 非0开头数字(非负整数)
^(0|[1-9]\d*)$
// 中文汉字
^[\u4e00-\u9fa5]{0,}$
// 英文或数字
^[A-Za-z0-9]*$
// 英文字母
^[A-Za-z]*$
// 数字或字母或_
^[\u4E00-\u9FA5A-Za-z\d]*$
// 中文或数字或字母或_
^[\u4E00-\u9FA5\w]*$
// 允许输入这些特殊字符
^[%&',;=?$]*$
// 禁止输入这些特殊字符
^[^%&',;=?$]*$
// QQ号校验
^[1-9]\d{4,10}$
// 邮政编码
^\d{6}$
// 12个月匹配
^(0?[1-9]|1[0-2])$
// 每月31天匹配
^((0?[1-9])|((1|2)[0-9])|30|31)$
// 匹配金钱
(^[1-9](\d+)?(\.\d{1,2})?$)|(^(0){1}$)|(^\d\.\d(\d)?$)
// 邮箱校验
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
// 域名校验
  ^([a-zA-Z\d][a-zA-Z\d-_]+\.)+[a-zA-Z\d-_][^ ]*$
// URL校验(带http|https)
    ^(http|https):\/\/([a-zA-Z\d][\w-]+\.)+[\w-]+(/[\w-./?#%&@=]*)?$
// 电话号码
^0\d{2,3}-?\d{7,8}$
// 手机号码
^((13[0-9])|(14[5,7,9])|(15[^4])|(16[6])|(17[0,1,2,3,5,6,7,8])|(18[0-9])|(19[8,9]))\d{8}$
// 	13.........
// 145........,147........,149........
// 150........,151........,152........,153........,155........,156........,157........,158........,159........
// 166........
// 170........,171........,172........,173........,175........,176........,177........,178........
// 18.........
// 198........,199........
// IP5地址
  ^(\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])$
  // 身份证校验
  ^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[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)$
  // 密码校验   数字/字母/特殊字符至少两种
  ^(?![a-zA-z]+$)(?!\d+$)(?![`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]+$)[a-zA-Z\d`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]+$
  // 统一社会信用代码
  /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}/g
//   	《GB_32100-2015_法人和其他组织统一社会信用代码编码规则》
// 统一代码为18位,统一代码由十八位的数字或大写英文字母(不适用I、O、Z、S、V)组成,由五个部分组成:
// 第一部分(第1位)为登记管理部门代码,9表示工商部门;(数字或大写英文字母)
// 第二部分(第2位)为机构类别代码;(数字或大写英文字母)
// 第三部分(第3-8位)为登记管理机关行政区划码;(数字)
// 第四部分(第9-17位)为全国组织机构代码;(数字或大写英文字母)
// 第五部分(第18位)为校验码(数字或大写英文字母)
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
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
# 类型相关
摘抄自 async-validator
类型相关
var pattern = {
  // http://emailregex.com/
  email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
  url: new RegExp('^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', 'i'),
  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,
}
var types = {
  integer: function integer(value) {
    return types.number(value) && parseInt(value, 10) === value
  },
  float: function float(value) {
    return types.number(value) && !types.integer(value)
  },
  array: function array(value) {
    return Array.isArray(value)
  },
  regexp: function regexp(value) {
    if (value instanceof RegExp) {
      return true
    }
    try {
      return !!new RegExp(value)
    } catch (e) {
      return false
    }
  },
  date: function date(value) {
    return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime())
  },
  number: function number(value) {
    if (isNaN(value)) {
      return false
    }
    return typeof value === 'number'
  },
  object: function object(value) {
    return typeof value === 'object' && !types.array(value)
  },
  method: function method(value) {
    return typeof value === 'function'
  },
  email: function email(value) {
    return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255
  },
  url: function url(value) {
    return typeof value === 'string' && !!value.match(pattern.url)
  },
  hex: function hex(value) {
    return typeof value === 'string' && !!value.match(pattern.hex)
  },
}
function type(rule, value, source, errors, options) {
  if (rule.required && value === undefined) {
    required(rule, value, source, errors, options)
    return
  }
  var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex']
  var ruleType = rule.type
  if (custom.indexOf(ruleType) > -1) {
    if (!types[ruleType](value)) {
      errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type))
    } // straight typeof check
  } else if (ruleType && typeof value !== rule.type) {
    errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type))
  }
}
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
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
