企业信用代码等常用的正则验证

本文整理了一系列常用的正则表达式,包括名字、身份证、手机号、邮箱、银行卡、支付宝账号、微信号和企业信用代码的验证规则,适用于各种信息的格式校验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的正则验证方法整合

var Reg = (/\S/g)==null												// 判断是否为空
var nameReg = /^[\u4E00-\u9FA5]{2,4}$/;					//  名字
var idcardReg = /^[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)$/;				//   身份证
var telReg = /^1[3456789]\d{9}$/;			//   手机号
var emailReg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;     //   邮箱
var bankReg = /^([1-9]{1})(\d{15}|\d{18})$/;							//    银行卡
var zfbReg = /(^[a-zA-Z0-9_.@]{10,30}$)|(^(?=\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$).{10,30}$)/; 			//   支付宝
var wxReg = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;					//    微信号
var qyReg = /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g;				//   企业信用代码

使用

if(nameReg.test(that.userName)==false) {
	reject('姓名格式错误')
}
<think>好的,我需要帮助用户在Spark SQL中使用正则表达式验证社会统一信用代码的格式。首先,我需要了解社会统一信用代码的格式规则。根据国家标准,统一社会信用代码由18位字符组成,包含数字和大写字母,结构分为五个部分:登记管理部门代码(1位)、机构类别代码(1位)、登记管理机关行政区划码(6位)、主体标识码(9位)和校验码(1位)。 接下来,我需要构建一个匹配该格式的正则表达式。第一部分是1位登记管理部门代码,使用[1-9A-Y]排除Z,因为Z是预留的。第二部分是1位机构类别代码,可以是数字或大写字母,所以用[0-9A-Z]。第三部分是6位行政区划码,同样是数字和字母的组合,因此用[0-9A-Z]{6}。第四部分的主体标识码是9位,同样遵循字符规则,所以[0-9A-Z]{9}。最后是1位校验码,用[0-9A-Z]。整个正则表达式应为^[1-9A-Y][0-9A-Z]{2}[0-9A-Z]{6}[0-9A-Z]{9}[0-9A-Z]$。 然后,在Spark SQL中使用RLIKE关键字进行正则匹配。例如,SELECT信用代码字段 FROM表 WHERE字段 RLIKE正则表达式。同时,需要注意Spark SQL的正则表达式是基于Java的,所以需要确保转义正确,可能不需要额外转义,但如果有特殊字符需要考虑。 另外,用户可能需要处理数据中的空值或无效数据,可以使用COALESCE或IFNULL函数来处理NULL值,确保验证时字段不为空。例如,COALESCE(字段, '') RLIKE正则表达式,或者结合CASE WHEN语句进行更复杂的验证。 最后,可能需要考虑性能优化,比如预先过滤掉明显不符合长度要求的数据,减少正则匹配的计算量。比如先检查长度是否为18位,再进行正则验证,这样可以提高查询效率。同时,如果有大量数据,可能需要调整Spark的配置或使用广播变量等优化手段。 总结步骤:构建正确的正则表达式,应用RLIKE进行匹配,处理空值,优化性能。同时,提醒用户注意校验码的具体计算规则,如果更严格的话需要自定义UDF,但正则只能做格式校验,无法验证校验码的正确性。</think>在Spark SQL中使用正则表达式验证社会统一信用代码的格式,可以通过`RLIKE`关键字实现。以下是具体步骤和实现示例: --- ### 一、社会统一信用代码格式要求 社会统一信用代码为18位字符组合,格式规则如下: 1. **第1位**:登记管理部门代码(1-9或A-Y,排除I、O、Z) 2. **第2位**:机构类别代码(0-9或A-Z) 3. **第3-8位**:登记管理机关行政区划码(6位) 4. **第9-17位**:主体标识码(9位) 5. **第18位**:校验码(0-9或A-Z) --- ### 二、Spark SQL正则表达式实现 #### 1. 构建正则表达式 完整正则表达式为: $$^[1-9A-Y][0-9A-Z]{2}[0-9A-Z]{6}[0-9A-Z]{9}[0-9A-Z]$$ #### 2. 使用RLIKE进行校验 ```sql SELECT credit_code, CASE WHEN credit_code RLIKE '^[1-9A-Y][0-9A-Z]{2}[0-9A-Z]{6}[0-9A-Z]{9}[0-9A-Z]$' THEN '有效' ELSE '无效' END AS validity FROM your_table ``` #### 3. 处理空值和特殊字符 ```sql SELECT COALESCE(credit_code, '') AS cleaned_code, CASE WHEN cleaned_code RLIKE '^[1-9A-Y][0-9A-Z]{2}[0-9A-Z]{6}[0-9A-Z]{9}[0-9A-Z]$' THEN '有效' ELSE '无效' END AS validity FROM your_table ``` --- ### 三、性能优化建议 1. **预过滤长度**:先过滤非18位的数据 ```sql WHERE LENGTH(credit_code) = 18 ``` 2. **使用广播变量**:对需要频繁匹配的字段启用广播优化[^2] --- ### 四、注意事项 - 该正则验证格式,不包含校验码的数学验证(需单独实现校验算法) - 中文符号需转换为ASCII字符后再验证 - 对Hive表建议使用`TBLPROPERTIES`声明正则约束[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值