/**
 * Validates that the value is a valid phone.
 */
Ext.define('Ext.data.validator.Phone', {
    extend: 'Ext.data.validator.Format',
    alias: 'data.validator.phone',
 
    type: 'phone',
 
    // https://www.sitepoint.com/community/t/phone-number-regular-expression-validation/2204/2
    //      (modified)
 
    /**
     * @cfg {String} message
     * The error message to return when the value is not a valid phone.
     * @locale
     */
    message: 'Is not a valid phone number',
 
    /**
     * @cfg {RegExp} matcher
     * A matcher to check for simple phones. This may be overridden.
     */
    matcher: new RegExp(
        '^ *' +
 
        // optional country code
        '(?:' +
            '\\+?' + // maybe + prefix
            '(\\d{1,3})' +
            // optional separator
            '[- .]?' +
        ')?' +
 
        // optional area code
        '(?:' +
            '(?:' +
                '(\\d{3})' + // without ()
                '|' +
                '\\((\\d{3})\\)' + // with ()
            ')?' +
            // optional separator
            '[- .]?' +
        ')' +
 
        // CO code (3 digit prefix)
        '(?:' +
            '([2-9]\\d{2})' +
            // optional separator
            '[- .]?' +
        ')' +
 
        // line number (4 digits)
        '(\\d{4})' +
 
        // optional extension
        '(?: *(?:e?xt?) *(\\d*))?' +
 
        ' *$'
    )
});