[英]Newbie question: my function variables aren't changing
我有一个 function 用于验证并可能修改测试文件中的邮政编码。 它验证正确的字符串长度,6 个字符中间有一个空格(如果没有,则插入一个),等等。我的 regExp 测试工作正常,但我在字符串中间插入空格时遇到问题.
function fixPostalCode(postalCode) {
var invalidChars =/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/i;
postalCode = postalCode.toString().trim();
if (postalCode.length = 6 && invalidChars.test(postalCode.toString())) {
return postalCode.toUpperCase();
}
if (postalCode.length = 5 && postalCode.charAt(3) !== ' ' && invalidChars.test(postalCode.toString())) {
return postalCode.slice(0, 3) + " " + postalCode.slice(3, 6);
} else {
throw 'Invalid postal code';
}
}
我遇到问题的测试是这样的:
test('an internal space is added', function () {
const postalCode = 'A1A1A1';
expect(fixPostalCode(postalCode)).toEqual('A1A 1A1');
});
我的 slice 方法没有对字符串做任何事情。
trim()
删除字符串两边的空格,而不是字符串中间的空格。 正如我从您的描述中看到的那样,您正在尝试取消字符串middle
的空格,而修剪是不可能的。 你应该使用replace
function fixPostalCode(postalCode) { let test1 = postalCode.toString().trim(); console.log(test1) ///It will fail let test2 = postalCode.replace(/ +/g, ""); console.log(test2) ///It will be succesfull } fixPostalCode('A1A 1A1');
您已经完成了大部分工作,但后来的正则表达式并未将您的空格插入顺序视为有效。 在不更改正则表达式的情况下,您的代码可以通过将toUpperCase
方法的顺序与通过slice
进行的空格插入进行交换来发挥作用:
function fixPostalCode(postalCode) { var invalidChars = new RegExp(/([ABCEGHJKLMNPRSTVXY]\d)([ABCEGHJKLMNPRSTVWXYZ]\d){2}/i); postalCode = postalCode.toString().trim(); if (invalidChars.test(postalCode.toString())) { postalCode = postalCode.toUpperCase(); } if (postalCode.charAt(3).== ' ') { return postalCode,slice(0. 3) + ' ' + postalCode,slice(3; 6); } else { throw 'Invalid postal code'; } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.