在正确的位置添加英国邮政编码的空间Javascript

时间:2015-09-11 18:06:26

标签: javascript jquery regex slice indexof

我正在尝试编写一个基本功能,允许我为已删除空格的英国邮政编码添加空格。

英国邮政编码在邮政编码字符串的最后一位之前总是有一个空格。

一些没有间距且间距正确的例子:

CB30QB => CB3 0QB
N12NL => N1 2NL
OX144FB => OX14 4FB

要查找字符串中的最后一位数,我是正则表达式/\d(?=\D*$)/g,我现有的Javascript如下:

// Set the Postcode
var postCode = "OX144FB";

// Find the index position of the final digit in the string (in this case '4')
var postcodeIndex = postCode.indexOf(postCode.match(/\d(?=\D*$)/g));

// Slice the final postcode at the index point, add a space and join back together.
var finalPostcode = [postCode.slice(0, postcodeIndex), ' ', postCode.slice(postcodeIndex)].join('');

return finalPostcode;

当我更改set postcost时,我得到以下结果:

CB30QB becomes CB3 0QB - Correct
N12NL becomes N1 2NL - Correct
CB249LQ becomes CB24 9LQ - Correct
OX144FB becomes OX1 44FB - Incorrect
OX145FB becomes OX14 5FB - Correct

似乎问题可能与两个具有相同值的数字有关,因为大多数其他组合似乎都有效。

有谁知道如何解决这个问题?

6 个答案:

答案 0 :(得分:5)

我应该使用string.replace

string.replace(/^(.*)(\d)/, "$1 $2");

DEMO

答案 1 :(得分:2)

你可以在正则表达式中使用 replace() ,你需要在结尾的3个字母之前放置空格



document.write('CB30QB'.replace(/^(.*)(.{3})$/,'$1 $2')+'<br>');
document.write('N12NL'.replace(/^(.*)(.{3})$/,'$1 $2')+'<br>');
document.write('CB249LQ'.replace(/^(.*)(.{3})$/,'$1 $2')+'<br>');
document.write('OX144FB'.replace(/^(.*)(.{3})$/,'$1 $2'));
&#13;
&#13;
&#13;

答案 2 :(得分:1)

var postCode = "OX144FB";

return postCode.replace(/^(.*)(\d)(.*)/, "$1 $2$3");

答案 3 :(得分:1)

使用String.prototype.replace方法显然是最简单的方法:

return postCode.replace(/(?=\d\D*$)/, ' ');

或使用贪婪:

return postCode.replace(/^(.*)(?=\d)/, '$1 ');

您之前的代码无法正常工作,因为您正在使用indexOfString.prototype.match()方法匹配的子字符串进行搜索(这是结束前的最后一位数字)。但如果该数字在字符串中多次,indexOf将返回第一次出现的位置。

另外,如果要在字符串中找到匹配的位置,请使用返回此位置的String.prototype.search()方法。

答案 4 :(得分:1)

正如其他人都在回答的那样,.replace()更容易。但是,让我指出代码中的错误。

问题是您正在使用postCode.indexOf()来查找已匹配的内容的第一次出现。在这种情况下:

Text:     OX144FB
Match:        ^ match is correct: "4"

Text:     OX144FB
IndexOf:     ^ first occurence of "4"

要解决此问题,请使用.index对象的match

// Find the index position of the final digit in the string (in this case '4')
var postcodeIndex = postCode.match(/\d(?=\D*$)/g).index;

答案 5 :(得分:0)

这是一个老问题,但是尽管Avinash Raj的解决方案有效,但仅当您的所有邮政编码都没有空格时,它才有效。如果您有混用,并且想将它们规范化为一个空格,则可以使用此正则表达式:

string.replace(/(\S*)\s*(\d)/, "$1 $2");

DEMO-它甚至可以使用多个空格!