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

时间:2016-10-12 05:20:09

标签: javascript regex

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

555-555-5555 
(555)-555-5555

为此,我使用以下正则表达式:

/\(?(\d{3}\)?)[- ]?(\d{3})[- ]?(\d{4})/

但是这对于以下表达式是错误的:

(555 - 555 5555

我想制作这个正则表达式来检查是否存在开括号,然后必须存在右括号,反之亦然。我的RE应该做些什么改变才能实现我的目标?

4 个答案:

答案 0 :(得分:3)

由于大括号是可选的( - 零或一次出现,正则表达式允许)和/或^(\(\d{3}\)|\d{3})[- ]?(\d{3})[- ]?(\d{4})$ 大括号。正则表达式中的OR条件可用于匹配括号中的三个数字或三个数字。

(\(\d{3}\)|\d{3})
^               ^ : Group
 ^^     ^^        : Matches ( & ) respectively
          ^       : OR condition in regex
   ^^^^^   ^^^^^  : Match three digits

Demo

input:valid {
  color: green;
}
input:invalid {
  color: red;
  font-weight: bold;
}



<input pattern="(\(\d{3}\)|\d{3})[- ]?(\d{3})[- ]?(\d{4})" />
&#13;
targetSdkVersion
&#13;
&#13;
&#13;

答案 1 :(得分:1)

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

&#13;
&#13;
"-"
&#13;
&#13;
&#13;

`

答案 2 :(得分:0)

用正则表达式做这个并不是一种优雅的方法,只需重复一遍。

/(?:\((\d{3})\)|(\d{3}))[- ]?(\d{3})[- ]?(\d{4})/

更改是我将\(?(\d{3})\)?替换为(?:\((\d{3})\)|(\d{3}))。最初的?:导致无法捕获总体群组,然后您有\((\d{3})\)(\d{3})

由于空的捕获组被作为空字符串给出,因此您可以使用$1$2获取前三个数字的值 - 无论是捕获它们的第一个还是第二个数组。

答案 3 :(得分:0)

在派对上很晚,但我认为这是freecodecamp挑战之一。所以,另外如果你想检查代码,那么这是我的解决方案版本。

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

它将检查指定的代码编号(此处代码为1表示挑战)以及额外检查+ infront的电话号码。