php 校验 邮政编码,php – 动态邮政编码验证

我需要以每个国家/地区为基础,以特定格式验证邮政编码.

例如:

$postcode_validation = array

(

'Australia' => array('NNNN'),

'Bahrain' => array('NNN', 'NNNN'),

'Netherlands' => array('NNNN AA'),

'United States' => array('NNNNN', 'NNNNN-NNNN', 'NNNNN-NNNNNN')

);

每个国家/地区可以根据需要提供尽可能多的邮政编码格式变体;哪里:

> N =数字[0-9]

> A =字母[a-zA-Z]

>它有时允许/包含超量

因此,如果我们以澳大利亚为例,它应该验证为真:

> 1245

> 4791

> 7415

等等…

并且应该失败:

> a113

> 18q5

> 1s-s7

等等…

鉴于此,我正在尝试创建一个单一的函数,我可以使用它来验证给定国家/地区的邮政编码与邮政编码的所有变体.如果邮政编码与规则中的至少一个匹配,则函数应返回true,如果不匹配则返回false.

所以,这就是我尝试这样做的方式(从简单的方法开始):

// mapping

$postcode_validation = array

(

'Australia' => array('NNNN'),

'Bahrain' => array('NNN', 'NNNN'),

'Netherlands' => array('NNNN AA'),

'United States' => array('NNNNN', 'NNNNN-NNNN', 'NNNNN-NNNNNN')

);

// helper function

function isPostcodeValid($country, $postcode)

{

// Load Mapping

global $postcode_validation;

// Init

$is_valid = false;

// Check If Country Exists

if (!array_key_exists($country, $postcode_validation))

return false;

// Load Postcode Validation Rules

$validation_rules = $postcode_validation[$country];

// Iterate Through Rules And Check

foreach ($validation_rules as $validation_rule)

{

// Replace N with \d for regex

$validation_rule = str_replace('N', '\\d', $validation_rule);

// Check If Postcode Matches Pattern

if (preg_match("/$validation_rule/", $postcode)) {

$is_valid = true;

break;

}

}

// Finished

return $is_valid;

}

// Test

$myCountry = 'Australia';

$myPostcode = '1468';

var_dump(isPostcodeValid($myCountry, $myPostcode));

?>

这似乎通过返回true来工作.但是对于$myPostcode =’1468a’,它也会返回true;

有没有人有办法通过固定规则进行动态邮政编码验证?

更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值