正则表达式NIC

时间:2016-03-22 19:16:55

标签: php regex

你能帮我验证一个毛里求斯的网卡。

[1 capital letter][dateofBirth][6 numbers][1 capital letter]

注意:出生日期格式:ddmmyy

我试过这个:

/^[A-Z]{1}[0-9]{12}[A-Z]{1}$/

但我如何验证NIC中的出生日期?谢谢

2 个答案:

答案 0 :(得分:3)

如果您想验证日期,那么只需使用正则表达式,您就会很难。但是,幸运的是,PHP具有checkdate功能。你只需要提取日,月和年,这应该很容易,但会稍微改变你的正则表达式。不要忘记在每个元素(日,月,年)周围加上括号,以便能够检索它们。

如果我没弄错的话,你的正则表达应该是这样的:

/^[A-Z]([0-9]{2})([0-9]{2})([0-9]{4})[0-9]{6}[A-Z]$/

然后检查日期,所以:

preg_match('/^[A-Z]([0-9]{2})([0-9]{2})([0-9]{2})[0-9]{6}[A-Z]$/', 'D160289784495A', $match);

var_dump(checkdate($match[2], $match[1], $match[3]));

答案 1 :(得分:0)

不适用于日期,年份和月份的范围。

您无法使用正则表达式简单地检查月,日和年的范围。为此你将使用一些库函数。以下正则表达式将执行验证格式的NIC 初步工作。之后继续检查日期的有效性。

此正则表达式应检查格式^[A-Z]\d{12}[A-Z]$

<强> Regex101 Demo

请注意您的格式

[1 capital letter][dateofBirth][6 numbers][1 capital letter]

由于出生日期格式为ddmmyy,因此仅计为6个数字,因此您的格式实际上就是这样

[1 capital letter][12 numbers][1 capital letter]