创建一个正则表达式
可以这样创建一个:var reg2=new RegExp("abc"); //RegExp是正则对象的构造函数
也可以通过标记的形式创建:var reg1=/abc/; //其中的' // '是标记,abc表示要匹配的字符
正则表达式匹配
var reg=/b/; //匹配字符串中的b字符
reg.test("abc");
//正则表达式的test用来检测字符串是否满足正则表达式的要求;
//由于"abc"中存在b,所以是符合要求的,所以这段代码的返回值为:true
const isTrue = reg.test("coke"); //由于"coke"中不存在b字符,所以不符合条件 -->isTrue:false
var reg2=/abc/;
reg2.test("adbcd"); //字符串中必然存在"abc"才符合要求,所以这段代码的返回值为false
reg2.test("1abc"); //true
reg2.test("abc123"); //true
reg2.test("abcabc"); //true
正则表达式特殊字符
字符类别
. 表示除了换行符(\r \n)以外的任意字符
var reg=/./;
reg.test("a"); //true
reg.test("."); //true
reg.test("\r"); //false
reg.test("1\r"); //存在一个1,不是换行符,所以结果为:true
reg.test("\r\n"); //false
//注意点:如果以后要匹配.字符,不要直接写.
//为了匹配qq邮箱,写了 /qq.com/ 这是一个错误的写法:
//=>/qq.com/不仅匹配:"qq.com"也匹配"qq1com" "qq@com"
//解决方案:/qq\.com/ 或者 /qq[.]com/
\d 表示数字
var reg=/\d/;
reg.test("1abc"); //由于存在一个数字,所以结果为true
reg.test("abcde"); //由于不存在任何数字,所以结果为false
//扩展:
var _reg=/\d\d/;
_reg.test("1b"); //不存在2个连续数字,所以结果为:false
_reg.test("a12c"); //存在2个连续数字,结果为:true
\D 是\d的取反结果,表示不是数字
var reg=/\D/;
reg.test("123"); //由于全是数字,所以结果为:false
reg.test("123a"); //存在一个字母,所以结果为:true
var reg2=/123\D5/;
reg2.test("12345"); //false
reg2.test("123b5"); //true
\w 匹配字母、数字、下划线 ,三者满足其一即可
var reg=/\w/;
reg.test("123"); //存在数字,结果为:true
reg.test("a"); //true
reg.test("1"); //true
reg.test("_"); //true
reg.test("-"); //false
reg.test("."); //false
reg.test("1."); //true
reg.test("_\r"); //true
reg.test("\r"); //false
\W 是\w的取反
\s 表示一个空白字符(例如:\r \n \t 空格 。。。)
var reg=/\s/;
reg.test("abc def"); //存在一个空白,结果为:true
reg.test("abc\r123"); //存在一个\r,结果为:true
reg.test("abc"); //false
\S 是\s的取反
var reg=/\S/;
reg.test(" \r \n "); //全是空白字符,结果为false
reg.test("123 abc"); //存在一个空白,结果为true
var reg3=/\s\S/;
reg3.test(" a"); //true
reg3.test("a "); //存在空白字符和非空白字符,但不符合正则的顺序,false
reg3.test("a b"); //true
\ 转义字符
var reg=/\./; //匹配.字符
var reg=/\//; //匹配一个正斜杠:/
字符集合
[ ]
var reg=/[1a2b3]/; //匹配这5个字符中的其中一个,只要满足其中,就是符合要求的
reg.test("a"); //结果为:true
reg.test("3"); //结果为:true
reg.test("cd56789"); //一个符合要求的字符都不存在,结果为:false
reg.test("a55555"); //结果为:true
var reg2=/[123][abc]/;
reg2.test("2a"); //true
reg2.test("3c"); //true
reg2.test("defgh1c"); //存在符合条件的1c,结果为:true
reg2.test("39"); //不满足
var reg2=/[0-9]/; //匹配数字0-9之间,任何一个数字 等价于:/\d/
var reg3=/[a-z]/; //匹配小写字母
var reg4=/[A-Z]/; //匹配大写字母
var reg5=/[a-zA-Z]/;//匹配所有字母
var reg6=/[A-Za-z]/;//..........
var reg10=/[0-9abc]/;
reg10.test("3");//true
reg10.test("five");//false
reg10.test("banana");//true
[^]
var reg=/[^123]/; //不是1 并且 不是2 并且 不是3
reg.test("a"); //true
reg.test("3"); //false
reg.test("123"); //没有1,2,3以外的字符,结果为:false
边界
^ 表示字符串最左边
$ 表示字符串最右边
var reg=/^abc/; //表示以abc开头
reg.test("123abc123"); //并不是以abc开头,结果为:false
reg.test("abc123"); //以abc开头,结果为:true
var reg=/abc$/; //表示以abc结尾
reg.test("123abc"); //结果为:true
reg.test("abc123"); //结果为:false
var reg=/^abc$/; //表示字符串abc
reg.test("abc"); //结果为:true
reg.test("123abc"); //结果为:false
量词
*
出现0次或多次
var reg=/\d*/;
reg.test("123"); //true
reg.test("234"); //true
reg.test(""); //true
var reg3=/1\d*/;
reg3.test("123"); //true
reg3.test("a123") //true
reg3.test("a2b"); //false
+
出现1次或多次
?
出现0次或一次
{3}
出现3次
{3,}
至少出现3次
{3,5}
出现3-5次
var reg=/abc{3}/; //表示匹配abccc
reg.test("123abccc123"); //结果为:true
|
或者
var reg=/abc|123/; //表示匹配abc或者123
()
分组
var reg=/(\d{3-4})-(\d{7,8})/;
var arr="021-33335555".match(/(\d{3,4})-(\d{7,8})/); //这个方法是查找一个或多个正则表达式的匹配。
arr[0] //全部
arr[1] //021
arr[2] //333355555
var reg=/(\d{3-4})-(\d{7,8})/;
var str = "021-33335555";
str.replace(/(\d{3,4})-(\d{7,8})/,'$1'); //这个方法是在字符串中查找匹配的子串, 并替换与正则表达式匹配的子串。
//021 返回分组后'$1'对应的字符串替换正则匹配到的所有字符
str.replace(/(\d{3,4})-(\d{7,8})/,'$2'); //33335555 返回分组后'$2'对应的字符串替换正则匹配到的所有字符
案例:匹配邮箱(国内)
var reg =/^1[3-9][0-9]\d{8}$/;
// 香港
protected function _checkIdCardHK($value)
{
$regx = "/[A-Z]{1,2}[0-9]{6}([0-9A])/";
if (preg_match($regx, $value)) {
return true;
}
return false;
}
// 澳门
protected function _checkIdCardMAC($value)
{
$regx = "/^[1|5|7][0-9]{6}\([0-9Aa]\)/";
if (preg_match($regx, $value)) {
return true;
}
return false;
}
// 台湾
protected function _checkIdCardTW($value)
{
$regx = "/[A-Z][0-9]{9}/";
if (preg_match($regx, $value)) {
return true;
}
return false;
}
// 回乡证
protected function _checkReturnHome($value)
{
$reg = "/(H|M)(\d{10})$/";
if(preg_match($reg, $value))
{
return true;
}
return false;
}
// 台胞证
protected function _checkIdTaiwan($value)
{
$reg = "/(^\d{8})$/";
if(preg_match($reg, $value))
{
return true;
}
return false;
}
// 护照
protected function _checkIdPassport($value)
{
$reg = "/^1[45][0-9]{7}|([P|p|S|s]\d{7})|([S|s|G|g]\d{8})|([Gg|Tt|Ss|Ll|Qq|Dd|Aa|Ff]\d{8})|([H|h|M|m]\d{8,10})$/";
if(preg_match($reg, $value))
{
return true;
}
return false;
}
1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成。
本体代码采用系列(即分区段)顺序编码方法。校验码按照以下公式计算:
C9=11-MOD(∑Ci(i=1→8)×Wi,11)
式中: MOD——代表求余函数;
i——代表代码字符从左至右位置序号;
Ci——代表第i位上的代码字符的值(具体代码字符见附表);
C9——代表校验码;
Wi——代表第i位上的加权因子;
当C9的值为10时,校验码应用大写的拉丁字母X表示;当C9的值为11时校验码用0表示。
2.代码的表示形式
为便于人工识别,应使用一个连字符“—”分隔本体代码与校验码。机读时,连字符省略。表示形式为:
xxxxxxxx—X
3.自定义区
为满足各系统管理上的特殊需要,规定本体代码PDY00001至PDY99999为自定义区,供各系统编制内部组织机构代码使用。自定义区内编制的组织机构代码不作为个系统之间信息交换的依据。
// 组织机构代码验证 true:真 false:假
function checkOrgCode(code) {
var ws = [3, 7, 9, 10, 5, 8, 4, 2];
var str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var reg = /^([0-9A-Z]){8}-[0-9|X]$/;// /^[A-Za-z0-9]{8}-[A-Za-z0-9]{1}$/
var sum = 0;
for (var i = 0; i < 8; i++){
sum += str.indexOf(code.charAt(i)) * ws[i];
}
var c9 = 11 - (sum % 11);
///c9 = c9 == 10 ? 'X' : c9
if (c9 == 11) {
c9 = '0';
} else if (c9 == 10) {
c9 = 'X' ;
} else {
c9 = c9+'';
}
alert(c9 +" -- "+ code.charAt(9));
if (!reg.test(code) || c9 !== code.charAt(9)) {
// alert("不是有效的组织机构代码!");
return false;
}else{
return true;
}
}
function CheckSocialCreditCode(Code) {
var patrn = /^[0-9A-Z]+$/;
//18位校验及大写校验
if ((Code.length != 18) || (patrn.test(Code) == false)) {
return false;
} else {
var Ancode; //统一社会信用代码的每一个值
var Ancodevalue; //统一社会信用代码每一个值的权重
var total = 0;
var weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]; //加权因子
var str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
//不用I、O、S、V、Z
for (var i = 0; i < Code.length - 1; i++) {
Ancode = Code.substring(i, i + 1);
Ancodevalue = str.indexOf(Ancode);
total = total + Ancodevalue * weightedfactors[i];
//权重与加权因子相乘之和
}
var logiccheckcode = 31 - total % 31;
if (logiccheckcode == 31) {
logiccheckcode = 0;
}
var Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
var Array_Str = Str.split(',');
logiccheckcode = Array_Str[logiccheckcode];
var checkcode = Code.substring(17, 18);
if (logiccheckcode != checkcode) {
return false;
}
return true;
}
}
/**
*验证营业执照是否合法:营业执照长度须为15位数字,前14位为顺序码,
*最后一位为根据GB/T 17710 1999(ISO 7064:1993)的混合系统校验位生成算法
*计算得出。此方法即是根据此算法来验证最后一位校验位是否政正确。如果
*最后一位校验位不正确,则认为此营业执照号不正确(不符合编码规则)。
*以下说明来自于网络:
*我国现行的营业执照上的注册号都是15位的,不存在13位的,从07年开始国
*家进行了全面的注册号升级就全部都是15位的了,如果你看见的是13位的注
*册号那肯定是假的。
*15位数字的含义,代码结构工商注册号由14位数字本体码和1位数字校验码
*组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。
* 一、前六位代表的是工商行政管理机关的代码,国家工商行政管理总局用
* “100000”表示,省级、地市级、区县级登记机关代码分别使用6位行
* 政区划代码表示。设立在经济技术开发区、高新技术开发区和保税区
* 的工商行政管理机关(县级或县级以上)或者各类专业分局应由批准
* 设立的上级机关统一赋予工商行政管理机关代码,并报国家工商行政
* 管理总局信息化管理部门备案。
* 二、顺序码是7-14位,顺序码指工商行政管理机关在其管辖范围内按照先
* 后次序为申请登记注册的市场主体所分配的顺序号。为了便于管理和
* 赋码,8位顺序码中的第1位(自左至右)采用以下分配规则:
* 1)内资各类企业使用“0”、“1”、“2”、“3”;
* 2)外资企业使用“4”、“5”;
* 3)个体工商户使用“6”、“7”、“8”、“9”。
* 顺序码是系统根据企业性质情况自动生成的。
*三、校验码是最后一位,校验码用于检验本体码的正确性
*/
function isValidBusCode(busCode){
return true;
/*var ret=false;
if(busCode.length==15){
var sum=0;
var s=[];
var p=[];
var a=[];
var m=10;
p[0]=m;
for(var i=0;i<busCode.length;i++){
a[i]=parseInt(busCode.substring(i,i+1),m);
s[i]=(p[i]%(m+1))+a[i];
if(0==s[i]%m){
p[i+1]=10*2;
}else{
p[i+1]=(s[i]%m)*2;
}
}
if(1==(s[14]%m)){
//营业执照编号正确!
//alert(“营业执照编号正确!”);
ret=true;
}else{
//营业执照编号错误!
ret=false;
//alert(“营业执照编号错误!”);
}
}else if(“”==busCode){
ret=true;
}
return ret;*/
}
/**
*验证国税税务登记号是否合法:税务登记证是6位区域代码+组织机构代码
*/
function isValidTaxCode(taxCode){
var ret=true;
if(isValidOrgCode($(“#memberBase.eOrgCode”).val())){
}
return ret;
}
/**
*验证固定电话号码。固定电话号码格式为:区号-号码
*/
function isValidPhone(phone){
var ret=false;
if(“”==phone || (/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?/.test(phone))){
ret=true;
}
return ret;
}
1、验证电话号码或者手机号码
1 2 3 4 5 6 7 8 9 10 | |
2、验证地址(中文、英文、数字)
1 2 3 4 5 6 7 8 9 | |
3、验证用户名
1 2 3 4 5 6 7 8 9 10 | |
4、验证密码
1 2 3 4 5 6 7 8 9 10 | |
5、验证企业税号
1 2 3 4 5 6 7 8 9 10 11 | |
6、验证金额
1 2 3 4 5 6 7 8 9 10 | |
7、验证身份证号,包括大陆身份证号,和港澳台身份证号,当然这里都只是简单的规范一下,实际的像香港的身份证号最后的括号里面的校验位都是需要根据前面的
数字依据一定的加权算法算出来进行校验的,这里没有涉及到。如果需要特别精确则可以去研究一番。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
1.邮箱格式判断 function isEmailAddress(obj) { function CheckSocialCreditCodeOrg(Code) { var checkcode = Code.substring(17, 18); function isValidBusCode(busCode){ function checkTaxpayerId(taxpayerId){ /* function checkAddressCode(addressCode){ } |