Javascript 如何使用正则表达式检查括号对条件?

Javascript 如何使用正则表达式检查括号对条件?,javascript,regex,Javascript,Regex,我正在编写一个java脚本,我想在其中验证以下格式的数字: 555-555-5555 (555)-555-5555 为此,我使用以下正则表达式: /\(?(\d{3}\)?)[- ]?(\d{3})[- ]?(\d{4})/ 但这对于以下错误的表达是正确的: (555 - 555 5555 我想用这个正则表达式来检查是否存在开始括号,然后必须存在结束括号,反之亦然。我应该在RE中做些什么改变以实现我的目标 对于正则表达式,没有一种优雅的方法可以做到这一点,只要重复一下就行了 /(?:\(

我正在编写一个java脚本,我想在其中验证以下格式的数字:

555-555-5555 
(555)-555-5555
为此,我使用以下正则表达式:

/\(?(\d{3}\)?)[- ]?(\d{3})[- ]?(\d{4})/
但这对于以下错误的表达是正确的:

(555 - 555 5555

我想用这个正则表达式来检查是否存在开始括号,然后必须存在结束括号,反之亦然。我应该在RE中做些什么改变以实现我的目标

对于正则表达式,没有一种优雅的方法可以做到这一点,只要重复一下就行了

/(?:\((\d{3})\)|(\d{3}))[- ]?(\d{3})[- ]?(\d{4})/
变化是我用
(?:\(\d{3})\)(\d{3})替换了
(?:\(\d{3})\)\124;(\ d{3}))
。初始的
?:
导致不捕获总体组,然后您有
\((\d{3})\)
(\d{3})


由于空的捕获组以空字符串的形式给出,因此您可以使用
$1$2

获取前三个数字的值,无论是捕获它们的第一个还是第二个组,使用regex并不是一种很好的方法,只需重复一下即可

/(?:\((\d{3})\)|(\d{3}))[- ]?(\d{3})[- ]?(\d{4})/
变化是我用
(?:\(\d{3})\)(\d{3})替换了
(?:\(\d{3})\)\124;(\ d{3}))
。初始的
?:
导致不捕获总体组,然后您有
\((\d{3})\)
(\d{3})


由于空的捕获组作为空字符串给出,因此您可以使用
$1$2

获取前三个数字的值-无论捕获它们的是第一个还是第二个组-因为大括号是可选的
-零或一次出现,正则表达式允许
和/或
大括号。正则表达式中的OR条件可用于匹配三个数字或括号中的三个数字

^(\(\d{3}\)|\d{3})[- ]?(\d{3})[- ]?(\d{4})$

输入:有效{
颜色:绿色;
}
输入:无效{
颜色:红色;
字体大小:粗体;
}

由于大括号是可选的
-零或一次出现,正则表达式允许
和/或
大括号。正则表达式中的OR条件可用于匹配三个数字或括号中的三个数字

^(\(\d{3}\)|\d{3})[- ]?(\d{3})[- ]?(\d{4})$

输入:有效{
颜色:绿色;
}
输入:无效{
颜色:红色;
字体大小:粗体;
}

您可以使用
RegExp
/^(\(\d{3}\)\d{3}-\d{3}-\d{4}$/
匹配括号内或不带括号的三位数字,例如,
“(555)”
“555”
,在字符串开头,后跟三位数字,后跟
后接四位数字,后接输入结束

var re=/^(\(\d{3}\)^\d{3})-\d{3}-\d{4}$/;
console.log(重新测试(“(555-555-5555”);//错误
console.log(重新测试(“555-555-5555”);//true

console.log(re.test(“(555)-555-5555”);//true
您可以使用
RegExp
/^(\(\d{3})\d{3})-\d{3}-\d{4}$/
来匹配括号内或不带括号的三位数字,例如,
“(555)”
“555”
,在字符串开头,后跟
“-”
后接四位数字,后接输入结束

var re=/^(\(\d{3}\)^\d{3})-\d{3}-\d{4}$/;
console.log(重新测试(“(555-555-5555”);//错误
console.log(重新测试(“555-555-5555”);//true

console.log(re.test(“(555)-555-5555”);//true
在晚会上很晚了,但我认为这是freecodecamp的挑战之一。因此,另外,如果您想检查代码,那么这里是我的解决方案版本

  let telRegex = /^\+?[1{1}]?[- ]?(\(\d{3}\)|\d{3})[- ]?(\d{3})[- ]?(\d{4})$/;

它将检查指定的代码编号(这里挑战的代码是1)和电话号码前面的+附加检查。

在聚会中很晚了,但我认为这是freecodecamp挑战之一。因此,如果您想检查代码,这里是我的解决方案版本

  let telRegex = /^\+?[1{1}]?[- ]?(\(\d{3}\)|\d{3})[- ]?(\d{3})[- ]?(\d{4})$/;

它将检查指定的代码号(这里挑战的代码是1)和电话号码前面的+附加检查。

为什么要进行此验证?谁在乎?为什么要骚扰用户以匹配其父母?
(555)的预期结果是什么5555555
?@guest271314应该是真的为什么要进行此验证?谁在乎?为什么要骚扰用户以匹配其参数?对于
(555)5555555
?@guest271314应该是真的为什么要使用
[-]?
而不是简单的
-
?@Huntro数字可以用空格或连字符
-
分隔,也可以不用空格分隔。字符类
[-]?
允许
-
或`(空格)零或一次。不确定
(555)的预期结果5555555
虽然如此,但注意
RegExp
将为该输入字符串返回true,如下所示well@guest271314我不知道,但是从OP的正则表达式来看,它应该返回true。另外,问题只是关于括号。我没有更改正则表达式中的其他部分。为什么要使用
[-]?
而不是简单的
-
?@Huntro数字可以用空格或连字符
-
分隔,也可以不用空格分隔。字符类
[-]?
允许
-
或`(空格)零或一次。不确定
(555)的预期结果5555555
虽然如此,但注意
RegExp
将为该输入字符串返回true,如下所示well@guest271314我不知道,但从OP的正则表达式来看,它应该返回true。另外,问题只是关于括号。我没有更改正则表达式中的其他部分。