我用它来验证电话号码.....它应该是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位有效?有人可以帮我吗?谢谢。
答案 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]+$