正则表达式电话号码验证,使用空格和最小位数的字符

时间:2019-06-20 06:23:55

标签: javascript regex ecmascript-7

我对正则表达式的技能较少,我有一个快速的问题。我需要使用regEx验证电话号码输入。

解释/表达将不胜感激。电话号码可以是以下任何一种格式:

(94) 123 345
(94).456.7899
(94)-456-7899
94-456-7899
+94 456 7899
94 456 7899
0094 456 7899
(94) 123
122 3454
1223454

1)数字可以包含空格和字符,也可以不包含字符。
  2)它必须至少包含5位数字,且没有空格和字符。(我此时停留在此位置)

第一次尝试

export const basicPhoneNumber = value =>
value && !/^\+?\d+$/i.test(value) 
? 'Invalid phone number' 
: undefined;

第二次尝试

  export const basicPhoneNumber = value =>
  value && !/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4,})/i.test(value) 
  ? 'Invalid phone number' 
  : undefined;

非常感谢您的帮助,并祝您一切顺利!

2 个答案:

答案 0 :(得分:2)

使用正则表达式进行电话号码验证非常复杂,尤其是在这种情况下,但是我们可以尝试使用类似于以下内容的表达式:

^\+?\(?([0-9]{2,4})[)\s.-]+([0-9]{3,4})([\s.-]+([0-9]{3,4}))?$

这可能会因未列出的某些所需实例而失败,不管某些输入(例如(000)000-0000)不是真正的电话号码。

const regex = /^\+?\(?([0-9]{2,4})[)\s.-]+([0-9]{3,4})([\s.-]+([0-9]{3,4}))?$/gmi;
const str = `(94) 123 345
(94).456.7899
(94)-456-7899
94-456-7899
+94 456 7899
94 456 7899
0094 456 7899
(94) 123
122 3454`;
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}`);
    });
}

Demo 1

编辑

要允许12234554,我们将为([)\s.-]+)?创建一个可选组,

^\+?\(?([0-9]{2,4})([)\s.-]+)?([0-9]{3,4})([\s.-]+([0-9]{3,4}))?$

Demo 2

答案 1 :(得分:2)

如果您要做的只是按照列出的条件验证电话号码,则可以考虑先去除所有非数字字符,然后使用RegExp进行测试。

不仅容易得多,而且易于理解。

// Sample data
const numbers = [
  '(94) 123 345',
  '(94).456.7899',
  '(94)-456-7899',
  '94-456-7899',
  '+94 456 7899',
  '94 456 7899',
  '0094 456 7899',
  '(94) 123',
  '122 3454'
]

// The validation function
const validate = value => {
  value = value.replace(/\D|(^0+)/g, '');
  return /^\d{5,}$/.test(value);
}

// Tests
numbers.forEach(function(phone){
  console.log(validate(phone), `"${phone}"`);
});

RegExp说明:

/\D|(^0+)/g

  1. \D匹配所有非数字字符。
  2. (^0+)在至少有1个开头的0个字符时匹配。

/^\d{5,}$/

当字符串以数字开头和结尾以及字符串由至少5个数字组成且没有任何非数字时匹配。