2013-07-23 117 views
0

我需要測試一個字符串並確保其有效的英國郵政編碼。正則表達式匹配英國郵政編碼

我的代碼目前是這樣的:

var re = /GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|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}/; 
console.log(re.test('WD4 9PL')); 

它返回

但是,如果我PL後添加額外的文本也返回

var re = /GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|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}/; 
console.log(re.test('WD4 9PL TEST')); 

第二個應該返回false,這怎麼能實現呢?

+0

你從哪裏獲得這些價值? –

回答

3

裹在^$你的正則表達式,以確保完整字符串匹配:

var re = /^(GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|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})$/; 
console.log(re.test('WD4 9PL')); 

^比賽開始行

$比賽線路

注月底,我ve也把它包裹在()

/^abc|def$/將匹配abc........def

/^(abc|def)$/只會匹配abcdef

例子:

> /abc/.test("abcd") 
true 
> /^abc$/.test("abcd") 
false 
> /^abc$/.test("abc") 
true 
+0

如果測試re.test('WD4 9PL TESt'),這仍然會返回true。 – CharliePrynn

+0

只是做了''re.test('WD4 9PL TESt') - > false' – mishik

+0

如果你感到困惑,'^'表示「字符串**必須**在這裏開始匹配」和'$'表示「串**必須**在這裏結束比賽」。 '/ [0-9] + /'會匹配任何字符串和* somewhere *中的數字,而'/^[0-9] + /'只會**匹配字符串**開始** (1+)的數字。 – h2ooooooo

相關問題