正则表达式显示的电话号码对9&当它应该仅显示10位有效时,总共10位数

时间:2014-06-19 13:25:03

标签: regex extjs extjs4 extjs4.1 extjs4.2

我用它来验证电话号码.....它应该是10位数字,一旦是10位数字,删除红色波浪线并在此模式中将其格式化为(xxx)xxx-xxxx。但是,根据这个验证,当我写完9位数字时,它会将数字显示为有效数字并删除红色波浪线,然后当我写第10位时,它会按上述模式格式化。

// custom Vtype for vtype:'phone'
// Vtype for phone number validation
Ext.apply(Ext.form.VTypes, { 
    'phoneText': i18n.validation.phonetext, 
    'phoneMask': /[\-\+0-9\(\)\s\.Ext]/, 
    'phoneRe': /^(\({1}[0-9]{3}\){1}\s{1})([0-9]{3}[-]{1}[0-9]{4})$|^(((\+44)? ?(\(0\))? ?)|(0))( ?[0-9]{3,4}){3}$|^Ext. [0-9]+$/, 
    'phone': function (v) {
        return this.phoneRe.test(v); 
    }
});

// Function to format a phone number
Ext.apply(Ext.util.Format, {
    phoneNumber: function(value) {
        var phoneNumber = value.replace(/\./g, '').replace(/-/g, '').replace(/[^0-9]/g, '');

        if (phoneNumber != '' && phoneNumber.length == 10) {
            return '(' + phoneNumber.substr(0, 3) + ') ' + phoneNumber.substr(3, 3) + '-' + phoneNumber.substr(6, 4);
        } else {
            return value;
        }
    }
});

Ext.namespace('Ext.ux.plugin');

// Plugin to format a phone number on value change
Ext.ux.plugin.FormatPhoneNumber = Ext.extend(Ext.form.TextField, {
    init: function(c) {
        debugger;
        c.on('change', this.onChange, this);
    },
    onChange: function(c) {
        debugger;
        c.setValue(Ext.util.Format.phoneNumber(c.getValue()));
    }});



          this.phone = {
                xtype: 'textfield',
                country: Bedbath.registry.params.country,
                labelSeparator: "",
                fieldLabel: i18n.label.phone+": <span style='color:red'>*</span>",
                name: "phone1RE",
                ref: 'phone1RE',
                id: 'phone1RE',
                allowBlank: false,
                vtype:'phone',
                plugins: new Ext.ux.plugin.FormatPhoneNumber()
            };

我不知道它如何显示它对9位有效?有人可以帮我吗?谢谢。

1 个答案:

答案 0 :(得分:3)

您的中间选项允许9位数。

^(((\+44)? ?(\(0\))? ?)|(0))( ?[0-9]{3,4}){3}$

一切都是可选的,除了最后一部分,可以是3-4次重复4次(这是9-12位数)

如果你想确定它的10个字符并且你正在使用美国的类型号码(你看起来是这样),那么这可以使得10个数字在正确的点之间有可能的空间,你可以将最后一部分改为:

((?: ?[0-9]{3}){2} ?[0-9]{4})

总的来说就是这样:

^(\({1}[0-9]{3}\){1}\s{1})([0-9]{3}[-]{1}[0-9]{4})$|^(((\+44)? ?(\(0\))? ?)|(0))((?: ?[0-9]{3}){2} ?[0-9]{4})$|^Ext. [0-9]+$

Regular expression visualization

Debuggex Demo