Ограничить ввод символов в текстовом поле / поле числа с помощью регулярного выражения? - PullRequest
18 голосов
/ 10 августа 2011

Я использую numberField в форме ExtJS и хочу ввести только положительные числа в диапазоне от 0 до 99, и он должен принимать только 2 символа (и не более 2).

{
    xtype:"textfield",
    allowNegative: false,
    allowDecimals: false,
    minValue: 0,
    maxValue: 99,
    maxLength: 2
}

выдает ошибкув приведенном выше коде, но он принимает более 2 символов.

Я также пробовал ниже, но проблема та же:

{
    xtype:"textfield",
    regex: /^\d{0,2}$/,
    regexText: "<b>Error</b></br>Invalid Number entered.",
    validator: function(v) {
        return /^\d{0,2}$/.test(v)?true:"Invalid Number";
    }
}

Как ограничить ввод более 2 символов?

Ответы [ 7 ]

15 голосов
/ 10 августа 2011

Если вы используете версию 3, документация TextField * maxLength описывает использование свойства autoCreate для указания максимальной длины (пример документа показывает NumberField, но он также поддерживаетсякласс TextField):

maxLength: Number Максимальная длина поля ввода, разрешенная для проверки (по умолчанию Number.MAX_VALUE).Это поведение предназначено для обеспечения мгновенной обратной связи с пользователем, улучшая удобство использования, позволяя вставлять и редактировать или переписывать и отслеживать.Чтобы ограничить максимальное количество символов, которое можно ввести в поле, используйте autoCreate, чтобы добавить в поле любые атрибуты, которые вы хотите, например:

var myField =
new Ext.form.NumberField({
     id: 'mobile',
     anchor:'90%',
     fieldLabel: 'Mobile',
     maxLength: 16, // for validation
     autoCreate: {tag: 'input', type: 'text', size: '20', autocomplete:
'off', maxlength: '10'} });

При использовании версии 4 TextField имеет enforceMaxLength свойство.

Если вы используете регулярное выражение, обе версии поддерживают свойство maskRe, хотя я не думаю, что это предотвращает вставку недопустимых значений.

7 голосов
/ 10 апреля 2012

Не уверен, был ли vtype до ExtJS 4.x, но именно так вы можете использовать vtype.

var validMileRadius = /^([0-9]{1,4})/;
        Ext.apply(Ext.form.field.VTypes, {
            //  vtype validation function
            radius: function(val, field) {
                return validMileRadius.test(val);
            },
        radiusText: 'Not a Valid Radius.'
    });

{
    xtype: 'textfield',
    width: 40,
    maxLength : 4,
    style : {marginLeft:'10px'},
    id : 'cityRadius',
    enforceMaxLength :4,
    vtype : 'radius'                    
}

Спасибо Punith

3 голосов
/ 29 сентября 2014

ДЛЯ ВСЕХ, КТО ВСТУПИТ В ТО ЖЕ ВРЕМЯ

Для ExtJS 4.x Вам даже не нужно создавать VType.Из документации ExtJS 4.x для Ext.form.field.Number:

enforceMaxLength : Boolean
True to set the maxLength property on the underlying input field. Defaults to false

Итак, вам просто нужно указать maxLength и установить для forceceMaxLength значение true.Согласно предыдущему сообщению это может выглядеть так:

{
  xtype: 'textfield',
  width: 40,
  maxLength : 4,,
  enforceMaxLength : true  
  style : {marginLeft:'10px'},
  id : 'cityRadius'                
}
1 голос
/ 01 декабря 2014

Просто помощник, но для ограничения текстового поля, чтобы разрешить только цифры, вы можете установить свойства текстового поля с атрибутом «maskRe».Позволяет создавать маски с регулярными выражениями.Вот маска, которая позволяет вводить только цифры:

{
    xtype: 'textfield',
    fieldLabel: 'Text Field(numbers-only)',
    enforceMaxLength:true,  //Restrict typing past maxLength: n
    maxLength: 8,           //Set max length validation
    maskRe:/[0-9.]/         //Allow only numbers
},
0 голосов
/ 10 марта 2016

Очень просто использовать maskre config для ограничения текстового поля. Если позволит вам ввести только цифры и алфавиты.

    xtype: 'textfield',
    fieldLabel: 'Text Field(numbers-only)',
    enforceMaxLength:true,
    maxLength: 8,
    maskRe: /[A-Za-z0-9]/
0 голосов
/ 10 июля 2015

Для динамической установки maxLength я придумал это переопределение:

Ext.override(Ext.form.field.Number, {
  /**
   * Setter: this method will set the maxLength variable on our NumberField
   * class, and on its actual dom element, so we can actually restrict the user
   * from entering over the maxLength
   * @param {Number} maxLength
   */
  setMaxLength: function(maxLength) {
    this.maxLength = maxLength;
    var inputEl = this.inputEl;
    if (inputEl) {
      var domEl = inputEl.dom;
      if (domEl) {
        domEl.maxLength = maxLength;
      }
    }
  },

  /**
   * Shortcut method for setting the maxLength based on the maxValue... if
   * maxValue is not set, then 0 is used, which means the maxLength will be 1
   */
  setMaxLengthFromMaxValue: function() {
    var maxValue = this.maxValue || 0;
    if (maxValue >= 0) {
      this.setMaxLength(maxValue.toString().length);
    }
  }
});
0 голосов
/ 11 мая 2015
maxLength: 2,
enforceMaxLength: true,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...