为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白板的微信 2023-07-06 10:07:14
我正在尝试创建一个根据正则表达式验证邮政编码的函数。用户可以选择一个或多个邮政编码。当我输入一个邮政编码时,它工作正常,但是当输入多个邮政编码时,我只是得到未定义的结果这是我的功能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);  }};
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

当 时,您不会返回任何东西postcode.length > 1

相反,您正在遍历postcode数组。函数内的 returnforEach不执行任何操作。

您需要决定该函数应返回什么。它应该只返回一个布尔值还是一个布尔值数组?

对于单个布尔值,您需要everysome

布尔数组只需使用map.


查看完整回答
反对 回复 2023-07-06
?
暮色呼如

TA贡献1853条经验 获得超9个赞

  1. postcode始终作为数组事件出现,您没有将任何参数传递给函数。

  2. 即使您返回值,您也会迭代postcode数组forEach,但 的结尾forEach将返回,而不是undefined按您的预期返回。booleanarray

  3. 我使用了每种方法来测试所有元素是否通过postcode测试。这里它应该适用true于所有元素,false如果有的话它会是false

  4. 为了避免每次返回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));

};


查看完整回答
反对 回复 2023-07-06
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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));

};


查看完整回答
反对 回复 2023-07-06
  • 3 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信