@
akatquas 拿匹配所有上网卡的正则举例:
原来的正则:^(?:\+?86)?14[579]\d{8}$
1. 允许以 “+86 ”,“ 0086 ” 以及 “ 86 ” 开头:
^(?:(?:\+?|00)86)?14[579]\d{8}$
2. 只允许以 “ 0086 ” 开头:
^(?:0086)?14[579]\d{8}$
解释:
^ # 锚点, 匹配字符串开始位置.
(?: # 非捕获组开始.
\+ # 匹配字符 "+".
? # 量词, 表示匹配 0 次 或 1 次. (作用于字符 "+")
86 # 匹配字符 "86".
) # 非捕获组结束
? # 量词, 表示匹配 0 次 或 1 次. (作用于捕获组)
14 # 匹配字符 "14".
[579] # 匹配集合中任意字符一次, 也就是 5 或 7 或 9 一次.
\d # 匹配数字, 可以视为 [0-9], 但不绝对等于.
{8} # 重复 8 次. (作用于 \d)
$ # 锚点, 匹配字符串结束位置.
连起来说,满足这个正则表达式的字符串的格式必须是:
允许以 “+86 ” 或者 “ 86 ” 开头,号段必须是 145 / 147 / 149,最后跟着 8 位数字。
这个正则里面 (?:\+?86)? 这一段是用来匹配国家码的,意思是匹配 “+86 ” 或者 “ 86 ”,如果需要再加一个可匹配项 “ 00 ”,那你改成 (?:(?:\+?|00)86)? 就可以了,这个正则匹配 “+86 ”,“ 0086 ” 以及 “ 86 ” 这三种情况。如果你只需要匹配 “ 0086 ”,那就直接改成 (?:0086)? 就可以了。