我需要验证插入文本框并存储在变量中的邮政编码:" $ code"。
如果格式如下:XXXX – XXX
它有效。如果没有,它就无效(X是数字)。
有人告诉我制作像这样的正则表达式但适用于我的需要:
$regex = "/^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$/";
我不仅不知道如何做到这一点,而且我也不知道该怎么做。
你们对如何解决我的问题有任何想法吗?
答案 0 :(得分:3)
您可以尝试以下方式:
/^[0-9]{4}\s-\s[0-9]{3}$/
或者:
/^\d{4}\s-\s\d{3}$/
编辑:如果-
和数字之间有0或更多的空格:
/^\d{4}\s*-\s*\d{3}$/
如果-
和数字之间有0或只有一个空格:
/^\d{4}\s?-\s?\d{3}$/
如果您在-
和数字之间没有任何空格:
/^\d{4}-\d{3}$/
答案 1 :(得分:0)
那么,对您要验证的邮政编码有一些了解会有所帮助。但这里有一些一般性的建议。
与许多其他语言功能相比,正则表达式非常强大,但也很复杂,难以维护和缓慢。
如果您需要验证数字的长度,只需将其转换为字符串并计算长度。
<?php
$len = strlen((string) $number);
if ($len < 3 || $len > 4) {
// invalid
}
如果您需要验证号码,请使用PHP's built-in filter functions。
<?php
$valid = filter_var(FILTER_VALIDATE_INT, array(
"options" => array(
"max" => 9999,
"min" => 100,
),
));
如果需要分隔符,正则表达式可能会派上用场。
<?php
$valid = (boolean) preg_match("/^\d{4}\s(-|–|—)\s\d{3}$/");
或者将正则表达式与过滤函数结合起来。
<?php
$valid = filter_input(INPUT_POST, "postalcode", FILTER_VALIDATE_REGEXP, array(
"options" => array(
"regexp" => "/^\d{4}\s(-|–|—)\s\d{3}$/",
),
));
虽然您也可以使用纯PHP验证它,但以防正则表达式对于您来说仍然很复杂。
有许多很棒的网站可以学习正则表达式或测试它们。我的个人最爱(不隶属于)是regex101。