繁体   English   中英

我似乎无法弄清楚正则表达式

[英]I can't seem to figure out the regular expression

我有以下代码。 我正在尝试让常规快递测试电话号码以进行验证。 使用当前参数,函数应该返回正值,但它没有,我不知道为什么。

function telephoneCheck(str) {

  let reg = /^[\d]{0,1}[\w]{0,1}[(]{0,1}[\d]{3}[-)\w]{0,2}[\d]{3}[-\w]{0,1}[\d]/;
  return reg.test(str);
  
}

console.log("function: " + telephoneCheck("1 (555) 555-5555"));

谁能看到我错过了什么?

首先,将所有\\w (匹配任何字母、数字或下划线)替换为\\s (匹配任何空格、制表符或换行符)。 我相信你不会在电话号码中写信。 其次,您需要在正则表达式的末尾添加一个量词{0,4} ,就像您在正则表达式的其他位置所做的那样。

所以最终的正则表达式将是^[\\d]{0,1}[\\s]{0,1}[(]{0,1}[\\d]{3}[-)\\s]{0,2}[\\d]{3}[-\\s]{0,1}[\\d]{0,4}

因为你的正则表达式是无稽之谈。

  1. 单个组不需要[][\\d]{0,1}可以只是\\d?
  2. \\w不匹配空格,一般情况下只是[a-z0-9]
  3. 您匹配的开始(但结束)后面可以跟-或任何\\w

 function telephoneCheck(str) { let reg = /^\\d?\\s?\\(?[\\d-]+\\)?\\s?\\d+/; return reg.test(str); } console.log("function: " + telephoneCheck("1 (555) 555-5555"));

  1. 您需要将\\w替换为\\s以获取空格
  2. 您需要转义括号\\(\\)
  3. 您需要将[-)\\w]{0,2}更改为[-\\)]{0,1}[\\s]{0,1}除非您希望非正统的 1 (555)-555-5555 成为真的。
  4. 最后的[\\d]应该是[\\d]{4}因为您希望最后有 4 位数字。

 function telephoneCheck(str) { let reg = /^[\\d]{0,1}[\\s]{0,1}[\\(]{0,1}[\\d]{3}[-\\)]{0,1}[\\s]{0,1}[\\d]{3}[-\\s]{0,1}[\\d]{4}/; return reg.test(str); } console.log("function: " + telephoneCheck("1 (555)555-5555"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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