我正在尝试编写一个基本功能,允许我为已删除空格的英国邮政编码添加空格。
英国邮政编码在邮政编码字符串的最后一位之前总是有一个空格。
一些没有间距且间距正确的例子:
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
似乎问题可能与两个具有相同值的数字有关,因为大多数其他组合似乎都有效。
有谁知道如何解决这个问题?
答案 0 :(得分:5)
答案 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;
答案 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 ');
您之前的代码无法正常工作,因为您正在使用indexOf
与String.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-它甚至可以使用多个空格!