在正确的位置添加 space 到英国邮政编码 Javascript
Add a space to UK Postcode in correct place Javascript
我正在尝试编写一个基本函数,允许我将 space 添加到 space 已被删除的英国邮政编码。
英国邮政编码在邮政编码字符串的最后一位数字之前总是有一个 space。
一些没有间距和正确间距的示例:
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;
我在更改设置的后期成本时得到以下结果:
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
问题似乎与具有相同值的两个数字有关,因为大多数其他组合似乎都有效。
有谁知道我该如何解决这个问题?
我应该使用 string.replace
string.replace(/^(.*)(\d)/, " ");
var postCode = "OX144FB";
return postCode.replace(/^(.*)(\d)(.*)/, " ");
你可以用正则表达式replace()
,你需要在最后3个字母前放置space
document.write('CB30QB'.replace(/^(.*)(.{3})$/,' ')+'<br>');
document.write('N12NL'.replace(/^(.*)(.{3})$/,' ')+'<br>');
document.write('CB249LQ'.replace(/^(.*)(.{3})$/,' ')+'<br>');
document.write('OX144FB'.replace(/^(.*)(.{3})$/,' '));
使用String.prototype.replace
方法显然是最简单的方法:
return postCode.replace(/(?=\d\D*$)/, ' ');
或使用贪心:
return postCode.replace(/^(.*)(?=\d)/, ' ');
您之前的代码不起作用,因为您正在使用 indexOf
搜索与 String.prototype.match()
方法匹配的子字符串(即结束前的最后一位数字)。但如果这个数字在字符串中多次出现,indexOf
将 return 第一次出现的位置。
顺便说一句,当您想在字符串中查找匹配项的位置时,请使用 return 找到该位置的 String.prototype.search()
方法。
正如其他人所回答的那样,.replace()
更容易。但是,让我指出代码中的错误。
问题是您正在使用 postCode.indexOf()
查找匹配项的第一次出现。在这种情况下:
Text: OX144FB
Match: ^ match is correct: "4"
Text: OX144FB
IndexOf: ^ first occurence of "4"
要修复它,请使用 match
对象的 .index
:
// Find the index position of the final digit in the string (in this case '4')
var postcodeIndex = postCode.match(/\d(?=\D*$)/g).index;
这是一个老问题,但是虽然 Avinash Raj 的解决方案有效,但只有当您的所有邮政编码都没有 space 时,它才有效。如果你有混合,并且你想将它们正规化为单个 space,你可以使用这个正则表达式:
string.replace(/(\S*)\s*(\d)/, " ");
DEMO - 它甚至适用于多个 space!
我正在尝试编写一个基本函数,允许我将 space 添加到 space 已被删除的英国邮政编码。
英国邮政编码在邮政编码字符串的最后一位数字之前总是有一个 space。
一些没有间距和正确间距的示例:
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;
我在更改设置的后期成本时得到以下结果:
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
问题似乎与具有相同值的两个数字有关,因为大多数其他组合似乎都有效。
有谁知道我该如何解决这个问题?
我应该使用 string.replace
string.replace(/^(.*)(\d)/, " ");
var postCode = "OX144FB";
return postCode.replace(/^(.*)(\d)(.*)/, " ");
你可以用正则表达式replace()
,你需要在最后3个字母前放置space
document.write('CB30QB'.replace(/^(.*)(.{3})$/,' ')+'<br>');
document.write('N12NL'.replace(/^(.*)(.{3})$/,' ')+'<br>');
document.write('CB249LQ'.replace(/^(.*)(.{3})$/,' ')+'<br>');
document.write('OX144FB'.replace(/^(.*)(.{3})$/,' '));
使用String.prototype.replace
方法显然是最简单的方法:
return postCode.replace(/(?=\d\D*$)/, ' ');
或使用贪心:
return postCode.replace(/^(.*)(?=\d)/, ' ');
您之前的代码不起作用,因为您正在使用 indexOf
搜索与 String.prototype.match()
方法匹配的子字符串(即结束前的最后一位数字)。但如果这个数字在字符串中多次出现,indexOf
将 return 第一次出现的位置。
顺便说一句,当您想在字符串中查找匹配项的位置时,请使用 return 找到该位置的 String.prototype.search()
方法。
正如其他人所回答的那样,.replace()
更容易。但是,让我指出代码中的错误。
问题是您正在使用 postCode.indexOf()
查找匹配项的第一次出现。在这种情况下:
Text: OX144FB
Match: ^ match is correct: "4"
Text: OX144FB
IndexOf: ^ first occurence of "4"
要修复它,请使用 match
对象的 .index
:
// Find the index position of the final digit in the string (in this case '4')
var postcodeIndex = postCode.match(/\d(?=\D*$)/g).index;
这是一个老问题,但是虽然 Avinash Raj 的解决方案有效,但只有当您的所有邮政编码都没有 space 时,它才有效。如果你有混合,并且你想将它们正规化为单个 space,你可以使用这个正则表达式:
string.replace(/(\S*)\s*(\d)/, " ");
DEMO - 它甚至适用于多个 space!