我的应用程序有一个仅允许数字(不允许使用逗号或点号)的文本字段。
在maskRe上的以下正则表达式可在extjs 4和extjs 6中使用,但不适用于extjs 5。
Ext.create('Ext.form.Panel', {
title: 'Textfield as numberfield',
width: 300,
bodyPadding: 10,
renderTo: Ext.getBody(),
items: [{
xtype: 'textfield',
name: 'number',
fieldLabel: 'Number',
maskRe: /[0-9]/
}]
});
这是错误吗?
有什么解决方法吗?
小提琴:https://fiddle.sencha.com/#fiddle/153c
最佳答案
使用此代码:
items: [{
xtype: 'textfield',
name: 'number',
fieldLabel: 'Number',
maskRe: /[0-9]/
}]
maskRe
在5.1.2中正确应用,但在5.1.1中未正确应用。我发现有关该问题的this forum thread。因此,我担心您必须升级到新的Ext或向后移植错误修正。此外,对于
maskRe
的功能似乎有些困惑。maskRe
仅应用于当前击键。如果您的字段包含elis
并键入a
,它将仅检查maskRe
是否允许a
,而不检查是否允许elisa
。因此,您可以定义一组可以键入的字符,但是不能定义某个字符最多可以键入一次,也不能定义必须在每个a
之后键入b
的字符。出于击键始终只包含一个字符的原因,在maskRe
上使用量词是无用的,但不会造成有害影响。对于其他验证,有
regex
,它不会阻止键入,但除非满足正则表达式,否则将字段标记为无效;或者您必须添加change
或blur
事件并自己进行检查(如果无效,则更改值)。请注意,您可以轻松地禁止提交/处理无效的表单,即,至少包含一个无效字段的表单。您不必删除错误的条目,可以让用户更正错误的条目(例如,在IBAN中添加一个缺少的数字,而不必再次输入)
我建议使用
change
事件检查双逗号,或将点更改为逗号,反之亦然(取决于所需的输入格式)。