正则表达式 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
\D
匹配所有 non-digit 个字符。
(^0+)
当至少有 1 个前导 0 字符时匹配。
/^\d{5,}$/
匹配字符串以数字开头和结尾,并且字符串至少包含 5 位数字且没有任何 non-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
\D
匹配所有 non-digit 个字符。(^0+)
当至少有 1 个前导 0 字符时匹配。
/^\d{5,}$/
匹配字符串以数字开头和结尾,并且字符串至少包含 5 位数字且没有任何 non-digits。