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

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

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

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

07-25 23:12