正则表达式 Phone 数字验证,空格和字符最少

Regular-Expression Phone number validation with spaces and characters with minimun digits

我不太了解正则表达式,我有一个快速的问题。我需要使用正则表达式验证 phone 数字输入。

Explanation/expression 将不胜感激。 Phone 数字可以是以下任何一种格式:

(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})([0-9]{4,})/i.test(value) 
  ? 'Invalid phone number' 
  : undefined;

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

Phone 使用正则表达式验证数字相当复杂,尤其是在这种情况下,但我们可以尝试使用类似于以下的表达式:

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

这可能会因某些未列出的所需实例而失败,无论某些输入(例如 (000) 000-0000)并不是真正的 phone 数字。

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

如果您需要做的只是根据您列出的标准验证 phone 个数字,您可以考虑先去除所有 non-digit 个字符,然后使用 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}"`);
});

正则表达式解释:

/\D|(^0+)/g

  1. \D 匹配所有 non-digit 个字符。
  2. (^0+) 当至少有 1 个前导 0 字符时匹配。

/^\d{5,}$/

匹配字符串以数字开头和结尾,并且字符串至少包含 5 位数字且没有任何 non-digits。