oracle 正则 匹配 身份正 手机号-爱代码爱编程
1.正则匹配身份证号:
regexp_like(card_id,'^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$')
^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$
^[1-9]:第一位数字不能为0。
\d{5}:接下来是五位数字,表示地区码。
(18|19|20)?:接下来的两位数字是年份的前两位,可以是18、19或20。
\d{2}:接下来是两位数字,表示年份的后两位。
(0[1-9]|1[0-2]):接下来是一位数字,表示月份。
(0[1-9]|[12]\d|3[01]):接下来是一位数字,表示日期。
\d{3}:接下来是三位数字,表示顺序码。
(\d|X)$:最后一位是校验码,可以是数字0-9或者字母X。
请注意,这个正则表达式没有考虑15位身份证号码,也没有进行校验码的验证。如果需要校验码验证,你需要编写更复杂的逻辑来计算和比较校验码。
如果你还需要匹配15位的身份证号码,可以修改正则表达式如下:
REGEXP_LIKE(your_column, '^[1-9]\\d{5}\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}$')
OR REGEXP_LIKE(your_column, '^[1-9]\\d{5}(18|19|20)?\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|X)$');
2.正则匹配手机号
regexp_like(phone,'^[1]([3-9])[0-9]{9}$')
^[1]([3-9])[0-9]{9}$
这个正则表达式的解释如下:
^:匹配字符串的开始。
[1]:手机号码以数字1开头。
([3-9]):第二位数字可以是3到9之间的任意数字。
[0-9]{9}:接下来是9位数字。
$:匹配字符串的结束。
在Oracle SQL中使用这个正则表达式来匹配手机号码的示例如下:
sql
SELECT * FROM your_table
WHERE REGEXP_LIKE(your_column, '^[1]([3-9])[0-9]{9}$');
请将your_table替换为你的表名,your_column替换为包含手机号码的列名。
这样,你就可以使用这个正则表达式来筛选出符合手机号码格式的记录了。