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 или более раз
  • ^ это начало строки
  • $ это конец строки

Это читается как: В начале строки, сопоставьте последнюю, затем сопоставьте ноль или более букв, цифр или символов подчеркивания, затем сопоставьте конец строки.

Вы можете использовать это:

/^[a-zA-Z][\w-]*$/

Не используя этот плагин, я полагаю, что последующие проверки добавлены через 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" } );

(Предполагается, что допускаются односимвольные записи. Если вам требуется как минимум два харакера, измените * в +.)

Другие вопросы по тегам