【发布时间】:2016-08-03 12:20:59
【问题描述】:
我正在编写测试来检查字符串是否包含与典型的美国电话号码模式匹配的模式。给我带来麻烦的特殊情况是:
function telephoneCheck(str) {
if(/^|\D+\d{3}\D+\d{3}\D+\d{4}$/.test(str)) {return 0;}
return 1;
}
console.log(telephoneCheck("(6505552368)"));
我的特殊问题是:由于正则表达式中的 \D+ 和末尾的 $,为什么函数会为给定的参数返回 0?我知道 \D+ 会寻找一个或多个非数字字符,而 $ 会寻找字符串的结尾。数字之间没有非数字,最后有一个结束括号,我期待 regex.test(str) === false。
【问题讨论】:
-
您的模式以
^|开头,它有效地匹配所有内容。它基本上说“匹配字符串的开头,或者[你的模式的其余部分] -
我可以建议简单地删除所有非数字字符,然后格式化其余部分吗?这样用户就不需要满足你的期望,你会得到一个漂亮干净的格式。
-
@CrayonViolent 感谢您的快速回复。好的,我试图寻找字符串的开头或非数字。我将其更正为 /^\D* 并且现在可以使用。谢谢!
-
我的下一个声明将与@Owen 的一致。免得自己头疼。要么为每个组件创建单独的字段,要么只删除所有非数字并计数。
-
@Owen 我要解决的问题要求非数字遵循几种模式之一(我的问题中没有描述),所以我不能。不过谢谢。编辑:这是一个带有设置测试参数的练习,因此很遗憾,无法设计输入。
标签: javascript regex