Life, half is memory, half is to continue.
常用正则表达式
By Vincent. @2023.10.9
常用正则表达式

1 正则表达式过滤中国身份证号

^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$
身份证号正则表达式

中国大陆的居民身份证号是一个结构特定的18位数字串,其中最后一位可能是数字或字母X。它的结构如下:

这个正则表达式的结构如下:

请注意,这个正则表达式只做了基本的结构验证,并没有对校验码进行严格的校验。如果你需要对身份证号进行完整验证,还需要额外的算法来计算和验证校验码。

2 正则表达式过滤中国大陆正确的手机号

在中国大陆,手机号通常有11位数字。目前(到我最后的训练数据为止,即2022年1月),常见的手机号码前三位(即区号)有以下几种:

133, 135-139, 147, 150-153, 155-159, 166, 170-173, 175-178, 180-189, 191, 198-199

基于这些信息,一个相对简单的正则表达式用于匹配这些手机号码为:

^((13[0-9])|(14[5,7,9])|(15[^4,\D])|(16[6])|(17[0-8])|(18[0-9])|(19[1,8,9]))\d{8}$

这个正则表达式考虑了以下几点:

3 正则表达式过滤正确的邮箱格式

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

让我们来分析这个正则表达式:

4 正则表达式过滤正确的http以及https请求

要匹配一个有效的 HTTP 或 HTTPS URL,我们需要考虑以下几个组件:

基于以上的组件,以下是一个简单的正则表达式来匹配 HTTP 和 HTTPS URLs:

^(https?):\/\/(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4})(?::\d+)?(?:\/?|[\/?]\S+)$

这个正则表达式考虑了以下几点:

5 正则表达式过滤正确的中国银行卡号

中国的银行卡号一般为16到19位数字。大部分银行卡都遵循Luhn算法(又称为“模10算法”)进行校验。基于这些信息,一个简单的正则表达式,用于匹配可能的银行卡号长度为:

^\d{16,19}$

这个正则表达式只能确定卡号由16到19位数字组成,但并没有执行Luhn算法校验。

如果你还希望使用正则表达式以外的代码来进行Luhn算法校验,以下是一个简单的Python例子:

def luhn_check(card_number):
    total = 0
    reverse_digits = card_number[::-1]
    for i, digit in enumerate(reverse_digits):
        n = int(digit)
        if i % 2 == 1:
            n *= 2
            if n > 9:
                n -= 9
        total += n
    return total % 10 == 0

card_number = "你的卡号"
if luhn_check(card_number):
    print("卡号可能有效")
else:
    print("无效卡号")
扫码分享收藏
扫码分享收藏