使用正则表达式验证数组中的多个邮政编码

我正在尝试创建一个根据正则表达式验证邮政编码的函数。用户可以选择一个或多个邮政编码。


当我输入一个邮政编码时,它工作正常,但是当输入多个邮政编码时,我只是得到未定义的结果


这是我的功能


const validatePostcode = (...postcode) => {

  const postcodeRegex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;

  if (postcode.length > 1) {

    postcode.forEach((item) => {

      console.log(item);

      return postcodeRegex.test(item);

    });

  } else {

    return postcodeRegex.test(postcode);

  }

};


白板的微信
浏览 171回答 3
3回答

侃侃无极

当 时,您不会返回任何东西postcode.length > 1。相反,您正在遍历postcode数组。函数内的 returnforEach不执行任何操作。您需要决定该函数应返回什么。它应该只返回一个布尔值还是一个布尔值数组?对于单个布尔值,您需要every或some。布尔数组只需使用map.

暮色呼如

postcode始终作为数组事件出现,您没有将任何参数传递给函数。即使您返回值,您也会迭代postcode数组forEach,但 的结尾forEach将返回,而不是undefined按您的预期返回。booleanarray我使用了每种方法来测试所有元素是否通过postcode测试。这里它应该适用true于所有元素,false如果有的话它会是false为了避免每次返回true都是空数组,我们应该检查postcode.length > 0.这是代码:const validatePostcode = (...postcode) => {  const postcodeRegex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;  return postcode.length > 0 && postcode.every(item => postcodeRegex.test(item));};

有只小跳蛙

forEach 方法并不意味着返回任何值:lambda 的返回值被丢弃。这就是为什么你得到未定义的原因。也是if... else...没用的。forEach 对于只有一个元素的数组效果很好。您需要一个接受 lmbda 并返回值的函数。根据您的需要every,它可能是(如果所有邮政编码匹配,则返回 true)或者可能map(返回一个布尔数组,每个传递的邮政编码一个)或some(如果至少一个邮政编码匹配,则返回 true)const validatePostcode = (...postcode) => {  const postcodeRegex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;  return postcode.map(item => postcodeRegex.test(item));};const validateAtLeastOnePostcode = (...postcode) => {  const postcodeRegex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;  return postcode.some(item => postcodeRegex.test(item));};
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript