在 PHP 中,如何确定字符串中是否存在邮政编码,如果存在,则返回邮政编码。在这种情况下,邮政编码可以是 5 个数字的字符串(即“55543”),也可以是用连字符连接到另外 4 个数字的 5 个数字的字符串(即“74657-9993”)。
任何人都可以用我可以使用的正则表达式模式preg_match
或任何其他好的方法来帮助我吗?
我preg_match_all("/\d{5}/", $str, $matches);
到目前为止,但这并不能解释可能的第二个 4 位数字或连字符。
在 PHP 中,如何确定字符串中是否存在邮政编码,如果存在,则返回邮政编码。在这种情况下,邮政编码可以是 5 个数字的字符串(即“55543”),也可以是用连字符连接到另外 4 个数字的 5 个数字的字符串(即“74657-9993”)。
任何人都可以用我可以使用的正则表达式模式preg_match
或任何其他好的方法来帮助我吗?
我preg_match_all("/\d{5}/", $str, $matches);
到目前为止,但这并不能解释可能的第二个 4 位数字或连字符。
5 个数字用连字符连接到另外 4 个数字:
preg_match_all("/\b\d{5}(?:-\d{4})?\b/", $str, $matches);
(?:-\d{4,})?
是一个可选组,带有连字符,后面至少有 4 位数字。
编辑:忘记使用单词边界防止第一部分超过 5 位(第二部分超过 4 位)。
编辑2:
好的,我刚刚注意到的另一件事是,如果您有12345-12345
但不想从中获得任何数字,您可以使用:
preg_match_all("/\b\d{5}(?!-\d{1,3}\b|-\d{5})(?:-\d{4})?\b/", $str, $matches);
负前瞻防止匹配-12345
(或更多数字,或少于 4 位数字)(如果存在),但只允许 4 位数字。
你的模式是
\b\d{5}(?:-\d{4})?\b
在 Regexr 上查看。
这里的一个重要部分是单词边界 \b
,它们确保没有匹配数字的一部分。
\d{5}
与您已有的 5 位数字匹配
(?:-\d{4})?
是可选部分(因为在组?
之后)。组?:
开始时只是使组不被捕获。
我最近在javascript中实现了这个
/^(\s*|\d{5}([\-]\d{4})?)$/;
只需修改您的正则表达式以允许可选前缀:
preg_match_all("/\d{5}(\-\d{4})?/", $str, $matches);