const regex = /^(?:(52\-)|(1\-))?(\()?(?(1)[0-9]{2,3}|[2-9][0-9]{2})(?(3)\)\s?|(\-|[.]|\s|))(?(1)[0-9]|[2-9])[0-9]{2}(?(4)\4|(?:\-|[.]|\s)?)[0-9]{4}(\s?(?:x|ext|ext.|extension|Ext|Ext.|Extension|#)\s?[0-9]+)?$/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(?:(52\\-)|(1\\-))?(\\()?(?(1)[0-9]{2,3}|[2-9][0-9]{2})(?(3)\\)\\s?|(\\-|[.]|\\s|))(?(1)[0-9]|[2-9])[0-9]{2}(?(4)\\4|(?:\\-|[.]|\\s)?)[0-9]{4}(\\s?(?:x|ext|ext.|extension|Ext|Ext.|Extension|#)\\s?[0-9]+)?$', 'gm')
const str = `Regular valid formats
225-586-7777
(223)249-4444
(223) 234-3344
223.456.2222
2253451111
223 334 4444
1-325-586-7777
1-(923)249-4444
1-(923) 234-3344
1-923.456.2222
1-9253451111
1-923 234 4444
52-125-586-7777
52-(123)249-4444
52-(123) 234-3344
52-123.456.2222
52-1253451111
52-123 134 4444
Valid formats with extensions
1-800-661-3696 x14700
1-800-661-3696x14700
1-800-661-3696 Extension 14700
1-800-661-3696 ext14700
325-586-7777 x123
(323)249-4444x123
(323) 234-3344 Ext 123
323.456.2222 ext 124
3253451111ext. 123
323 334 4444extension234
(223)456 7891 x 123
(223)456 7891 ext 123
(223)456 7891 ext. 123
(223)456 7891 Ext 123
(223)456 7891 Ext. 123
(910)456-8970 x12
(910)456-8970 #12
(910)456-8970 extension12456
(910)456-8970 Extension 12456
Invalid formats
444000-1111
444-0001111
444.000-1111
444000 1111
444 0001111
444 000.1111
444.0001111
444000.1111
444-000.1111
(4440001111
444)0001111
440001111
444000111111
125-586-7777
(123)249-4444
(123) 234-3344
123.456.2222
1253451111
123 134 4444
125-586-7777
(123)249-4444
(123) 234-3344
123.456.2222
1253451111
123 134 4444
Invalid formats with extensions
12-125-586-7777
12-(123)249-4444
12-(123) 234-3344
12-123.456.2222
12-1253451111
12-123 134 4444
12-444000-1111
12-444-0001111
12-444.000-1111
12-444000 1111
12-444 0001111
12-444 000.1111
12-444.0001111
12-444000.1111
12-444-000.1111
12-(4440001111
12-444)0001111
12-440001111
12-444000111111
1-888-720-1275 x2 x2
1-888-720-1275 2
1-888-720-1275 x
1-888-720-1275 Ext
888-720-1275x
1-444000-1111
1-444-0001111
1-444.000-1111
1-444000 1111
1-444 0001111
1-444 000.1111
1-444.0001111
1-444000.1111
1-444-000.1111
1-(4440001111
1-444)0001111
1-440001111
1-444000111111`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
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}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions