Как работает Sencha Touch matcher? - PullRequest
       7

Как работает Sencha Touch matcher?

0 голосов
/ 06 апреля 2011

Я пытаюсь создать простой сопоставитель, который соответствует любой строке, состоящей из буквенно-цифровых символов. Я попробовал следующее:

    Ext.regModel('RegistrationData', {
        fields: [
            {name: 'nickname',type: 'string'},
        ],

        validations: [
            {type: 'format', name: 'nickname', matcher: /[a-zA-Z0-9]*/}
        ]
    });

Однако это не работает, как ожидалось. Я не нашел никакой документации о том, как должно выглядеть регулярное выражение в сопоставителе.

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Ваше текущее регулярное выражение /[a-zA-Z0-9]*/ будет соответствовать строке, содержащей ноль или более вхождений букв нижнего или верхнего регистра (A-Z) или чисел в любом месте строки. Вот почему Joe#2, J/o/e, *89Joe, а также Joe, Joe24 and jOe28` совпадают - все они содержат ноль или более последующих вхождений соответствующих символов.

Если вы хотите, чтобы ваша строка содержала только соответствующие символы, вы должны изменить регулярное выражение в соответствии с ответом stema :

/^[a-zA-Z0-9]*$/

Но у этого есть еще одна проблема. Из-за *, который измеряет ноль или более вхождений , он также соответствует пустой строке, поэтому правильная строка должна быть:

/^[a-zA-Z0-9]+$/

с +, означающим одно или несколько вхождений . Это позволит использовать псевдонимы, содержащие только один символ или цифру в нижнем или верхнем регистре, например a, F или 6.

1 голос
/ 06 апреля 2011

Я нашел блог на sencha.com , где они объясняют валидацию.

Я понятия не имею, что такое sencha-touch, но, может быть, это помогает, когда вы говорите нам, что вы даете своему регулярному выражению, что вы ожидаете от него, и что он на самом деле делает (работает не так, как ожидалось, немного расплывчато). Согласно блогу, он принимает «формат регулярного выражения», поэтому для вашей простой проверки он должен быть довольно стандартным.

EDIT:

Как дикое предположение, может быть, вы хотите использовать якоря, чтобы в имени действительно были только буквы и цифры:

/^[a-zA-Z0-9]*$/

^ соответствует началу строки

$ соответствует концу строки

...