我正试图了解有关正则表达式的更多信息,但遇到了麻烦
我当前的查询:
function telephoneCheck(str) {
return str.match(/[0-9]{3}[-][0-9]{3}[-][0-9]{4}/g)? true : false
}
这仅适用于诸如"555-555-5555"
之类的特定输入,而不适用于诸如"1 (555) 555-5555"
之类的其他输入。我不知道如何查询可选字符和空格。此外,括号处理很奇怪,我发现了一些疯狂的查询,例如/(\d+-)\1\d{4}/g
,但我不知道它在做什么,并且我不想使用我不理解的代码。
有人可以向我显示一个查询来解决“ 1(555)555-5555”的问题,其中前两个字符(一个和一个空格)是可选输入吗?
这些是正则表达式应该能够处理的输入:
“ 1(555)555-5555”
“ 1(555)555-5555”
“ 1 555-555-5555”
“ 555-555-5555”
“(555)555-5555”
“ 5555555555”
我找到了解决方法
regex: function telephoneCheck(str) {
var regex = /^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}$/;
return regex.test(str);
}
telephoneCheck("555-555-5555");
但是我不知道这里发生了什么。如果有人可以解释发生了什么,我很乐意为您提供这个已发布问题的答案:)
答案 0 :(得分:1)
您一直对尝试将所有内容都包含在正则表达式中保持警惕,并质疑为什么数据首先如此多变。
例如,如果您只是解析一堆您认为应该是电话号码的内容,并且注意到许多不同的格式,那么使用逻辑实际上可能更易读。
执行上述操作可能是一种非常聪明的方法,但是在需要更多内容之前,我对正则表达式的使用会更加粗暴。
以下内容将两种模式组合到一个正则表达式中。您使用|
分隔符说or
。同样,如果您的字符串与您说的完全一样,则应使用^
(以开头)和$
以确保您不会得到误报。
var pattern = /^[0-9] \([0-9]{3}\) [0-9]{3}-[0-9]{4}$|^[0-9]{3}[-][0-9]{3}[-][0-9]{4}$/
pattern.test('555-555-5555') //true
pattern.test('1 (555) 555-5555') // true
pattern.test('(555) 555-5555') // false
正如我所说的,如果您有很多不同的格式。质疑为什么,有一种方法可以首先清理。然后也许使用逻辑和单独的语句。
var parensPattern = /^[0-9] \([0-9]{3}\) [0-9]{3}-[0-9]{4}$/
var noParensPattern = /^[0-9]{3}[-][0-9]{3}[-][0-9]{4}$/
if(parensPattern.test('1 (555) 555-5555')) {
// do something
} else if (noParensPattern.test('555-555-5555)) {
// do something
}
查看http://regex101.com,这是很棒的资源。