Livevalidation - регулярное выражение
Я использую LiveValidation ( http://livevalidation.com/) для проверки формы на моем сайте для URL страницы. Мои условия:
- Не может быть пустым
- Должен начинаться с буквы
- Пробелы не допускаются
- Только буквенно-цифровые символы, тире и подчеркивание
Пока у меня есть это:
var formName = new LiveValidation("sitePages-name");
formName.add(Validate.Presence);
formName.add(Validate.Format,{ pattern: /^[a-zA-Z]/, failureMessage: "Must start with a letter." } );
formName.add(Validate.Exclusion, {within: [' '], partialMatch: true, failureMessage: "Spaces are not allowed."});
formName.add(Validate.Format,{ pattern:/[a-zA-Z0-9-_]+$/, failureMessage: "Only alpha-numeric characters, dashes and underscores."})
Первое и второе условия соблюдены. Я борюсь с третьим и четвертым условиями "Без пробелов" и "Только буквенно-цифровые символы, тире и подчеркивание".
Я пытался выполнить пробел и четвертое условие с помощью регулярных выражений, но это не сработало, поэтому я просто пока разделил пробелы в Исключении. Шаблон для четвертого условия работает, если символ, который вы только что набрали, не входит в шаблон регулярного выражения. Но если вы продолжаете вводить "действительные" символы и ранее имели "недопустимый" символ, ошибка исчезнет и станет действительной.
Кто-нибудь знает, как правильно сделать шаблон, чтобы поймать его, если в поле ввода есть ЛЮБЫЕ "недействительные" символы? Было бы также хорошо, если бы я мог объединить условие отсутствия пространства с шаблоном, если это возможно.
3 ответа
/^[a-zA-Z][a-zA-Z0-9_\-]*$/
,
[a-zA-Z]
означает письмо.[a-zA-Z0-9_\-]
означает букву, цифру, тире или подчеркивание.*
означает повторить 0 или более раз^
это начало строки$
это конец строки
Это читается как: В начале строки, сопоставьте последнюю, затем сопоставьте ноль или более букв, цифр или символов подчеркивания, затем сопоставьте конец строки.
Не используя этот плагин, я полагаю, что последующие проверки добавлены через add
обрабатываются по порядку.
В таком случае:
var formName = new LiveValidation("sitePages-name");
// Must be present
formName.add(Validate.Presence);
// Must start with A-Z or a-z
formName.add(Validate.Format,{ pattern: /^[a-zA-Z]/, failureMessage: "Must start with a letter." } );
// Must only have A-Z, a-z, 0-9, _, or -
formName.add(Validate.Format,{ pattern:/.[a-zA-Z0-9_\-]+$/, failureMessage: "Only alpha-numeric characters, dashes and underscores."})
Я не вставил правило для пробелов, потому что оно охватывается третьим правилом, требующим A-Z
, a-z
, 0-9
, _
, а также -
,
Выше я предполагаю, что вы хотите быть настолько конкретным, насколько это возможно в сообщении об ошибке. Потому что это можно сделать за один шаг:
formName.add(Validate.Format,{ pattern: /^[a-zA-Z][a-zA-Z0-9_\-]*$/, failureMessage: "Must start with a letter and consist only of alphanumerics, underscores, or dash characters" } );
(Предполагается, что допускаются односимвольные записи. Если вам требуется как минимум два харакера, измените *
в +
.)