maskRe ExtJS 6.0.2

时间:2017-09-04 09:41:54

标签: javascript regex extjs extjs6

我只是试图限制用户输入1到6之间的数字。所以我的代码是:

{
        xtype            : 'textfield',
        id               : 'NUMBER',
        width            : '100%',
        fieldLabel       : "NUMBER",
        dataIndex        : 'NUMBER',
        maxLength        : 1,
        value            : 0,
        regex            : /[0-6\/]/,
        maskRe           : /[0-6]/,
        enforceMaxLength : true,
        readOnly         : true,
        mandatory        : true,
}

由于某种原因,我可以输入1到9之间的任何数字(虽然我得到无效的表格错误)。此外,由于起始值因某种原因为0,我可以在他之前添加一个数字,例如我可以输入" 90"。

所以我的最后一个问题是,"为什么我的" maskRe"工作正常"?

2 个答案:

答案 0 :(得分:1)

您正在寻找:

{
  xtype: 'numberfield',
  label: 'Age',
  minValue: 1,
  maxValue: 6,
  name: 'age'
}

关于maskRe,他们说:

  

maskRe:RegExp   用于过滤击键的输入掩码正则表达式>   (键入的字符)不匹配。注意:它不会过滤字符>已经在输入中。

所以/ [1-6] /的maskRe将让用户输入1到6个字符,但不会使已经存在的0无效,并且不会施加长度限制。

答案 1 :(得分:1)

你的代码,没有// Below is for my sample data var dt = new DataTable(); var idCol = dt.Columns.Add("ID", typeof(int)); var itemCol = dt.Columns.Add("Item", typeof(string)); var upCol = dt.Columns.Add("Unit Price", typeof(int)); var qtyCol = dt.Columns.Add("Qty",typeof(int)); dt.Rows.Add(8, "Pasta", 20, 1); dt.Rows.Add(9, "Pasta", 20, 1); // I generate my expected result by using linq var mergedData = dt.Rows.OfType<DataRow>() .GroupBy(g=> g.ItemArray[itemCol.Ordinal]) .Select(c=> new { item = c.Key, id = c.FirstOrDefault()?[idCol], // I think you need first id as result up = c.Average(x=> int.Parse(x[upCol].ToString())), // I think you need average of Unit Prices as result qty = c.Sum(x => int.Parse(x[qtyCol].ToString())) // I think you need sum of Quantity as result }); // A clone of current DataTable will give me its structure without data // I use this as a temporary DataTable var newDt = dt.Clone(); foreach (var md in mergedData) { newDt.Rows.Add(md.id, md.item, md.up, md.qty); } dt = newDt; ,对我来说是一个小提琴;所以我不确定为什么它不适合你。

You can find the fiddle here;请注意,我仅在最近的Chrome中测试过。