我需要验证一个12位数。其中,
剩下的6个数字可以是0到9之间的任意数字。
示例190131958103
有人能给我满足上述验证的正则表达式吗?
发布于 2018-12-07 04:46:16
根据定义,2位数值小于100 (最大值为99),因此您不需要检查这个值。此正则表达式将满足您的其他需求:
^\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])\d{6}$它以任意两个数字开始;然后是01-09或10-12;后面是01-09、10-19、20-29或30-31中的一个;后面是6个数字。
更新
如果您不能在您的模式中使用\d,请用[0-9]替换它。
^[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]{6}$发布于 2018-12-07 04:47:20
你可以试试这个伙伴
^\d{2}(?:0[1-9]|1[0-2])(?:[0-1]|[1-2][0-9]|[3][0-1])\d{6}$万一你不想使用\d
^[0-9]{2}(?:0[1-9]|1[-2])(?:[0-1]|[1-2][0-9]|[3][0-1])[0-9]{6}$解释
^ -字符串的开始。\d{2} -匹配任何两位数字。(?:0[1-9]|1[-2]) -非捕获-组。匹配1到12之间的任何数字。(?:[0-1]|[1-2][0-9]|[3][0-1]) -非捕获-组。匹配1到31之间的任何数字。\d{6} -匹配任何六位数字。$ -字符串的末端。P.S -我建议使用非捕捉组。因为您注意到在regex.This中再次使用组在任何地方都会提高性能。
发布于 2022-11-03 01:08:44
松散检查
您可以使用以下方式检查马来西亚的IC:
^\d{2}(?:0[1-9]|1[012])(?:0[1-9]|[12][0-9]|3[01])\d{6}$这样做的目的是:
^\d{2} -字符串的开头是任意2位数.(?:0[1-9]|1[012]) -匹配01到12。(?:0[1-9]|[12][0-9]|3[01]) -匹配01到31。\d{6}$ -字符串的末尾是任意6位数.严格检查
如果要确保日期是有效的,例如,检查哪个月有28、29、30或31天,可以使用以下方法:
^\d{2}(?:(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-9])|(?:01|03|05|07|08|10|12)(?:3[01])|(?:04|06|09|11)(?:30))\d{6}$这样做的目的是:
^\d{2} -字符串的开头是任意2位数.(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-9]) -在01到12月份,在01到29之间。(?:01|03|05|07|08|10|12)(?:3[01]) -在01,03,05,07,08,10和12个月,30到31比赛。(?:04|06|09|11)(?:30) -在04,06,09,11月份,只有30场比赛。\d{6}$ -字符串的末尾是任意6位数.注意事项
正如你所知道的,这没有考虑到闰年和二月份有多少天。
如果您需要检查闰年,我建议您不要为此使用regex,因为它太复杂了。
https://stackoverflow.com/questions/53663245
复制相似问题