我的应用程序有一个只允许数字(没有逗号或点)的文本字段。
以下关于maskRe的正则表达式适用于extjs 4和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]/
}]
});
这是一个错误吗?
有没有解决方法呢?
答案 0 :(得分:1)
使用此代码:
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
。由于击键总是只包含一个字符,因此使用change
上的量词是没用的,但不是有害的。
对于其他验证,有regex
,这不会阻止输入,但是除非符合正则表达式,否则将该字段标记为无效;或者您必须添加blur
或change
事件并自行检查(如果无效则更改值)。
请注意,您可以轻松地禁止提交/处理无效表单,即包含至少一个无效字段的表单。您不必删除错误的条目,您可以让用户更正它(例如,将一个缺失的数字添加到IBAN而不必再重复输入)
我建议使用{{1}}事件检查双逗号,或将点更改为逗号,反之亦然(取决于您所需的输入格式)。