我使用正則表達式supplied by the British government驗證英國郵政編碼。我的測試目前看起來是這樣的:匹配整個字符串與正則表達式
const postcodeRegex = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$/g;
console.log(postcodeRegex.test('s75ed')); // returns true
console.log(postcodeRegex.test('s75ed555555')); // returns false
console.log(postcodeRegex.test('555555s75ed')); // returns true
第2個控制檯日誌是正確的,但我希望第3次返回false。當模式在字符串的末尾匹配時,測試返回true,但是這允許在字符串的開頭處有任何亂碼,這意味着整個字符串是一個無效的郵編。
如何嚴格匹配整個字符串的模式?
此模式是否直接從英國政府複製?如果是這樣,我很驚訝他們沒有正確地測試它自己。似乎有幾個缺陷:o) – agrm
@agrm是直接從.gov網站上發佈的文檔。我知道這是令人難以置信的,但這就是政府所做的一切。 – Coop
@agrm我添加了一個鏈接到PDF。 – melpomene