Предположим, что $contry — это «de» или «at».
Я предполагаю, что язык немецкий ('de')
Таким образом, вы можете получить локаль следующим образом:
$locale = new Zend_Locale('de_' . strtoupper($contry));
Вы можете использовать валидатор следующим образом:
$validator = new Zend_Validate_PostCode('de_' . strtoupper($contry));
or
$validator = new Zend_Validate_PostCode($locale);
Edit1
со своим комментарием:
Если у вас есть только регион, вы не можете получить локаль.
Например, если регион – 'et'
, вы не можете знать, какая локаль – 'aa_ET'
или 'am_ET'
.
Поэтому я думаю, что лучшим решением будет изменить ваш список, чтобы получить хорошее значение в POST.
Например, поставьте 'en_ZW'
вместо 'zw'
Edit2
После проверки, если вам просто нужен валидатор 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
person
doydoy44
schedule
01.05.2014