0

如何國際化Bean驗證? 即測試前。 ZipCode使用@ZipCode約束來檢測當前用戶是否正在使用給定語言(或已給出國家地址)並將驗證公式(如下所示的正則表達式)調整爲該用戶上下文。如何確定CostraintValidator實現中的用戶區域以選擇驗證例程?

一個屬性:

@ZipCode 
private String zipCode; 

,它會根據用戶是否是來自美國,中國和德國等驗證郵政編碼

下面我就發現了這樣的正則表達式模式:

"GB", "GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}" 
"JE", "JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}" 
"GG", "GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}" 
"IM", "IM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}" 
"US", "\d{5}([ \-]\d{4})?" 
"CA", "[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d" 
"DE", "\d{5}" 
"JP", "\d{3}-\d{4}" 
"FR", "\d{2}[ ]?\d{3}" 
"AU", "\d{4}" 
"IT", "\d{5}" 
"CH", "\d{4}" 
"AT", "\d{4}" 
"ES", "\d{5}" 
"NL", "\d{4}[ ]?[A-Z]{2}" 
"BE", "\d{4}" 
"DK", "\d{4}" 
"SE", "\d{3}[ ]?\d{2}" 
"NO", "\d{4}" 
"BR", "\d{5}[\-]?\d{3}" 
"PT", "\d{4}([\-]\d{3})?" 
"FI", "\d{5}" 
"AX", "22\d{3}" 
"KR", "\d{3}[\-]\d{3}" 
"CN", "\d{6}" 
"TW", "\d{3}(\d{2})?" 
"SG", "\d{6}" 
"DZ", "\d{5}" 
"AD", "AD\d{3}" 
"AR", "([A-HJ-NP-Z])?\d{4}([A-Z]{3})?" 
"AM", "(37)?\d{4}" 
"AZ", "\d{4}" 
"BH", "((1[0-2]|[2-9])\d{2})?" 
"BD", "\d{4}" 
"BB", "(BB\d{5})?" 
"BY", "\d{6}" 
"BM", "[A-Z]{2}[ ]?[A-Z0-9]{2}" 
"BA", "\d{5}" 
"IO", "BBND 1ZZ" 
"BN", "[A-Z]{2}[ ]?\d{4}" 
"BG", "\d{4}" 
"KH", "\d{5}" 
"CV", "\d{4}" 
"CL", "\d{7}" 
"CR", "\d{4,5}|\d{3}-\d{4}" 
"HR", "\d{5}" 
"CY", "\d{4}" 
"CZ", "\d{3}[ ]?\d{2}" 
"DO", "\d{5}" 
"EC", "([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?" 
"EG", "\d{5}" 
"EE", "\d{5}" 
"FO", "\d{3}" 
"GE", "\d{4}" 
"GR", "\d{3}[ ]?\d{2}" 
"GL", "39\d{2}" 
"GT", "\d{5}" 
"HT", "\d{4}" 
"HN", "(?:\d{5})?" 
"HU", "\d{4}" 
"IS", "\d{3}" 
"IN", "\d{6}" 
"ID", "\d{5}" 
"IL", "\d{5}" 
"JO", "\d{5}" 
"KZ", "\d{6}" 
"KE", "\d{5}" 
"KW", "\d{5}" 
"LA", "\d{5}" 
"LV", "\d{4}" 
"LB", "(\d{4}([ ]?\d{4})?)?" 
"LI", "(948[5-9])|(949[0-7])" 
"LT", "\d{5}" 
"LU", "\d{4}" 
"MK", "\d{4}" 
"MY", "\d{5}" 
"MV", "\d{5}" 
"MT", "[A-Z]{3}[ ]?\d{2,4}" 
"MU", "(\d{3}[A-Z]{2}\d{3})?" 
"MX", "\d{5}" 
"MD", "\d{4}" 
"MC", "980\d{2}" 
"MA", "\d{5}" 
"NP", "\d{5}" 
"NZ", "\d{4}" 
"NI", "((\d{4}-)?\d{3}-\d{3}(-\d{1})?)?" 
"NG", "(\d{6})?" 
"OM", "(PC)?\d{3}" 
"PK", "\d{5}" 
"PY", "\d{4}" 
"PH", "\d{4}" 
"PL", "\d{2}-\d{3}" 
"PR", "00[679]\d{2}([ \-]\d{4})?" 
"RO", "\d{6}" 
"RU", "\d{6}" 
"SM", "4789\d" 
"SA", "\d{5}" 
"SN", "\d{5}" 
"SK", "\d{3}[ ]?\d{2}" 
"SI", "\d{4}" 
"ZA", "\d{4}" 
"LK", "\d{5}" 
"TJ", "\d{6}" 
"TH", "\d{5}" 
"TN", "\d{4}" 
"TR", "\d{5}" 
"TM", "\d{6}" 
"UA", "\d{5}" 
"UY", "\d{5}" 
"UZ", "\d{6}" 
"VA", "00120" 
"VE", "\d{4}" 
"ZM", "\d{5}" 
"AS", "96799" 
"CC", "6799" 
"CK", "\d{4}" 
"RS", "\d{6}" 
"ME", "8\d{4}" 
"CS", "\d{5}" 
"YU", "\d{5}" 
"CX", "6798" 
"ET", "\d{4}" 
"FK", "FIQQ 1ZZ" 
"NF", "2899" 
"FM", "(9694[1-4])([ \-]\d{4})?" 
"GF", "9[78]3\d{2}" 
"GN", "\d{3}" 
"GP", "9[78][01]\d{2}" 
"GS", "SIQQ 1ZZ" 
"GU", "969[123]\d([ \-]\d{4})?" 
"GW", "\d{4}" 
"HM", "\d{4}" 
"IQ", "\d{5}" 
"KG", "\d{6}" 
"LR", "\d{4}" 
"LS", "\d{3}" 
"MG", "\d{3}" 
"MH", "969[67]\d([ \-]\d{4})?" 
"MN", "\d{6}" 
"MP", "9695[012]([ \-]\d{4})?" 
"MQ", "9[78]2\d{2}" 
"NC", "988\d{2}" 
"NE", "\d{4}" 
"VI", "008(([0-4]\d)|(5[01]))([ \-]\d{4})?" 
"PF", "987\d{2}" 
"PG", "\d{3}" 
"PM", "9[78]5\d{2}" 
"PN", "PCRN 1ZZ" 
"PW", "96940" 
"RE", "9[78]4\d{2}" 
"SH", "(ASCN|STHL) 1ZZ" 
"SJ", "\d{4}" 
"SO", "\d{5}" 
"SZ", "[HLMS]\d{3}" 
"TC", "TKCA 1ZZ" 
"WF", "986\d{2}" 
"XK", "\d{5}" 
"YT", "976\d{2}" 

回答

0

這將非常依賴於您的用例和數據。例如,您的應用程序在哪裏存儲給定用戶的Locale?這是用戶元數據的一部分,還是按照每個請求發送(在客戶端/服務器應用程序中)。沒有通用的解決方案,您將不得不編碼用戶Locale的處理。

一旦你知道你的用戶區域的存儲位置,你需要以某種方式讓它進入你的ConstraintValidator實施ZipCode,以便選擇最適合這個正則表達式。一種方法可以是使用ThreadLocal來設置當前用戶Locale

相關問題