Php 正则表达式

Php 正则表达式,php,regex,Php,Regex,你能帮我验证一下毛里求斯的网卡吗 [1 capital letter][dateofBirth][6 numbers][1 capital letter] 注:出生日期格式:ddmmyy 我试过这个: /^[A-Z]{1}[0-9]{12}[A-Z]{1}$/ 但是如何在NIC中验证出生日期?感谢您不提供日期、年份和月份范围。 您不能简单地用正则表达式检查月、日和年的范围。为此,您必须使用一些库函数。下面的正则表达式将执行验证NIC的格式的初步工作。之后,继续检查日期的有效性 此正则表达式应

你能帮我验证一下毛里求斯的网卡吗

[1 capital letter][dateofBirth][6 numbers][1 capital letter]
注:出生日期格式:
ddmmyy

我试过这个:

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

但是如何在NIC中验证出生日期?感谢您

不提供日期、年份和月份范围。

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

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

请注意,在您的格式中

[1个大写字母][出生日期][6个数字][1个大写字母]

因为出生日期的格式是ddmmyy,所以它只算为6个数字,所以您的格式实际上是这样的


[1个大写字母][12个数字][1个大写字母]

如果要验证日期,仅使用regex很难做到这一点。但是,幸运的是,PHP有一个函数。您只需提取日期、月份和年份,这应该很容易,但会稍微改变您的正则表达式。不要忘记在每个元素(日、月、年)周围加上括号,以便能够检索它们

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

/^[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]));

请给出一些有效NIC的示例。请注意,
[…]{1}
是多余的。字符类(
[]
)将始终匹配单个字符。例如:D160289784495AIn
160289784495
16
是天
02
月,
89
年?是@chris85,你是对的。但前6个数字是出生日期。我如何验证这个例子:D160298190098A谢谢你的回答:)@Student:你不能用简单的正则表达式验证年、月、日的范围。明白你的意思了。但是,如果用户输入D421329184478A,则不应接受。@Student:是的,这就是正则表达式的问题。您不能简单地验证数字的范围。您必须提取日期部分。然后以
dd/mm/yy
格式排列,并使用一些库函数进行检查。在这里使用简单的正则表达式是不够的。@学生使用正则表达式来验证简单的字符模式。如果您需要检查数字范围,请使用数字运算符。这正是我键入的内容,所以我只是在其中进行了编辑。完全没有问题:)您能解释一下$match[2]在做什么吗?非常感谢您的replypreg\u match可以修改其第三个参数以包含所有匹配的元素。第一个元素将是匹配整个模式的元素。以下元素(如果有)将是放在正则表达式模式括号中的不同元素。因此,NIC的模式为ddmmyyy,match[1]将为dd,match[2]mm和match[3]yyy。然后您必须为checkdate函数正确地订购它们。