【问题标题】:Regex is showing phone number as valid for 9 & 10 total digits when it should show valid for 10 digits only正则表达式显示电话号码对 9 位和 10 位总数字有效,而它应该显示仅对 10 位有效
【发布时间】:2014-06-19 13:25:02
【问题描述】:

我正在使用它来验证电话号码.....它应该是 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}。这是没有量词的任何东西的默认值。
  • 您说的是美国号码还是英国电话号码?因为我无法获得美国格式的 9 位数字。
  • 我要的是美国号码

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


【解决方案1】:

您的中间选项允许 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]+$

Debuggex Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多