При проверке формы с помощью jquery убедитесь, что поле содержит хотя бы одну букву - PullRequest
0 голосов
/ 11 августа 2010

Итак, я ужасно отстой в регулярных выражениях и JavaScript. Поэтому, когда я понял, что мне нужно проверить поле формы с помощью jquery, чтобы убедиться, что используется хотя бы один альфа-символ, я решил попросить вас о помощи.

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

Вот метод валидатора, который я создал, который делает все, но гарантирует, что используется хотя бы один альфа-символ.

 $.validator.addMethod("nameRegex", function(value, element) {
        return this.optional(element) || /[^a-z/g]+/gi.test(value) || !/[^\.\'\:\-_ a-z0-9]+/gi.test(value);
    }, "Name must contain at least one letter.");

Какие-либо советы / подсказки / идеи / оскорбления? Спасибо всем!

1 Ответ

1 голос
/ 11 августа 2010

Мне повезло, я заглянул в нужную букву и сопоставил ее только с действительными символами минимальной длины. В моем примере я использую минимальную длину 8 символов с допустимыми символами апостроф, пробел, дефис, точка, подчеркивание и буквенно-цифровые символы. Предполагается, что класс символов \ w соответствует символам подчеркивания и буквенно-цифровых символов. Кажется, работает в моих тестах:

var r = new RegExp("^(?=([` -.]|\\w)*?[a-zA-Z])([` -.]|\\w){8,}$")
> r.test('12345678') //all numbers shouldn't work
false
> r.test('12345678a') //long enough and one letter should work
true
> r.test('12345`_bc') //allow ` _
true
> r.test('a12345`_') //shouldn't matter if letter is in front
true
> r.test('123a45`_') //shouldn't matter if letter is in middle
true
> r.test('12345`_29') //even if special characters no letter should not work
false

РЕДАКТИРОВАТЬ: Я добавил '?' после «*» в заглядывании вперед, чтобы сделать квантификатор не жадным. Также я должен отметить, что я проверял это в Chrome, и, очевидно, мои контрольные примеры не являются окончательными. Надеюсь, это поможет. Другой подход состоит в том, чтобы сопоставить ноль со многими действительными символами, по крайней мере 1 букву, а затем ноль со многими действительными символами. Что-то вроде:

var r = new RegExp("^([` -.]|\\w)*[a-zA-Z]+([` -.]|\\w)*$")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...