textfield maskRe don't type dot extjs 5 错误?

textfield maskRe dont type dot extjs 5 bug?

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

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]/
  }]
});

这是一个错误吗?

是否有解决方法?

Fiddle: 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,它不会阻止输入,但除非满足正则表达式,否则将字段标记为无效;或者你必须添加一个 changeblur 事件并自己进行检查(如果无效则更改值)。

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

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