我需要一个正则表达式的电话号码不接受0作为3位美国区号的第一个数字

时间:2017-02-22 19:20:14

标签: javascript regex

我目前正在使用以下正则表达式来匹配电话号码

'\\([1-9]{3}\\)\\s{1}[0-9]{3}-[0-9]{4}'

但是上面的模式在前3位数字中不允许0,当我将其修改为

'\\([0-9]{3}\\)\\s{1}[0-9]{3}-[0-9]{4}'

它接受0作为第一个数字。我想生成一个正则表达式,它不接受第一个数字的0,但接受其余的数字。

我修改了我认为适合我需要的正则表达式,但我不完全确定(从未做过正则表达式)并且不知道如何在regex101上测试它

'\\([1-9]{1}[0-9]{2}\\)\\s{1}[0-9]{3}-[0-9]{4}'

如果有人可以帮助我,如果你能指出我是否朝着正确的方向前进,那就太棒了

我正在寻找这个问题的反面,这里的答案确保数字以0开头,但我正在寻找以下实现的逆转

Javascript Regex - What to use to validate a phone number?

谢谢你, 维杰

2 个答案:

答案 0 :(得分:3)

试试这个:

/\([1-9]\d\d\)\s\d{3}-\d{4}/;

或者:

new RegExp('\\([1-9]\\d\\d\\)\\s\\d{3}-\\d{4}');

<强>解释

\(    : open paren
[1-9] : a digit (not 0)
\d\d  : 2 digits (including 0)
\)    : close paren
\s    : one space
\d{3} : 3 digits (including 0)
-     : hyphen
\d{4} : 4 digits (including 0)

答案 1 :(得分:1)

这应该有效。

正则表达式:

[1-9]\d{2}\-\d{3}\-\d{4}

输入:

208-123-4567
099-123-4567
280-123-4567

输出:

208-123-4567
280-123-4567

JavaScript代码:

&#13;
&#13;
const regex = /[1-9]\d{2}\-\d{3}\-\d{4}/gm;
const str = `208-123-4567
099-123-4567
280-123-4567`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
&#13;
&#13;
&#13;

请参阅:https://regex101.com/r/3DKEas/1