【发布时间】: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