textfield maskRe不要输入dot extjs 5 bug?

时间:2016-02-03 14:44:28

标签: javascript regex extjs extjs5

我的应用程序有一个只允许数字(没有逗号或点)的文本字段。

以下关于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]/
  }]
});

这是一个错误吗?

有没有解决方法呢?

小提琴:https://fiddle.sencha.com/#fiddle/153c

1 个答案:

答案 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,这不会阻止输入,但是除非符合正则表达式,否则将该字段标记为无效;或者您必须添加blurchange事件并自行检查(如果无效则更改值)。

请注意,您可以轻松地禁止提交/处理无效表单,即包含至少一个无效字段的表单。您不必删除错误的条目,您可以让用户更正它(例如,将一个缺失的数字添加到IBAN而不必再重复输入)

我建议使用{{1}}事件检查双逗号,或将点更改为逗号,反之亦然(取决于您所需的输入格式)。