繁体   English   中英

新手问题:我的 function 变量没有改变

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM