假设 $contry 是 'de' 或 'at'。
我猜语言是德语('de')
所以你可以像这样获得语言环境:
$locale = new Zend_Locale('de_' . strtoupper($contry));
您可以使用这样的验证器:
$validator = new Zend_Validate_PostCode('de_' . strtoupper($contry));
或
$validator = new Zend_Validate_PostCode($locale);
编辑1
与您的评论:
如果您只有区域,则无法获取语言环境。
例如,如果区域是'et',则您无法知道区域设置是'aa_ET' 还是'am_ET'。
所以我认为更好的解决方案是修改您的列表以在 POST 中获得良好的价值。
例如,将'en_ZW' 替换为'zw'
编辑2
验证后,如果你只是想要验证器Zend_Validate_PostCode,有办法。
确实,每个本地的xx_XX表示语言和地区,对于同一地区的所有语言,都有相同格式的邮政编码。
以下是您将恢复验证器的代码:
$contry = 'at';
$list_locale = Zend_Locale::getLocaleList();
$contry_caps = strtoupper($contry);
foreach($list_locale as $locale_str => $bool){
$locale_obj = new Zend_Locale($locale_str);
if ($contry_caps == $locale_obj->getRegion()){
$locale = $locale_str;
break;
}
}
$validator = new Zend_Validate_PostCode($locale);
但是,请注意,有些地区没有在 Zend 中定义邮政编码(我使用的版本是 1.12.6)。
以下是没有邮政编码验证器的地区:
001
AE
EH
LY
PS
QA
YE
BT
150
AG
BS
BZ
DM
FJ
GD
GI
GM
GY
JM
KI
KN
KY
LC
MW
SB
SL
SS
TT
UM
VC
VG
WS
419
BO
CO
CU
EA
IC
PA
PE
SV
IR
BF
BJ
BL
CI
GA
MF
KP
MM
AW
CW
SR
SX
ST
TL
AL
VN