我正在编写一个java脚本,我想在其中验证以下格式的数字:
555-555-5555
(555)-555-5555
为此,我使用以下正则表达式:
/\(?(\d{3}\)?)[- ]?(\d{3})[- ]?(\d{4})/
但是这对于以下表达式是错误的:
(555 - 555 5555
我想制作这个正则表达式来检查是否存在开括号,然后必须存在右括号,反之亦然。我的RE应该做些什么改变才能实现我的目标?
答案 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
input:valid {
color: green;
}
input:invalid {
color: red;
font-weight: bold;
}
<input pattern="(\(\d{3}\)|\d{3})[- ]?(\d{3})[- ]?(\d{4})" />
&#13;
targetSdkVersion
&#13;
答案 1 :(得分:1)
您可以使用RegExp
/^(\(\d{3}\)|^\d{3})-\d{3}-\d{4}$/
匹配括号内的三个数字或不带括号,例如"(555)"
或"555"
,在字符串的开头,后跟{{1接下来是三位数字,接着是"-"
,后跟四位数字,后跟输入结束
"-"
&#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的电话号码。