2013-06-20 2 views
1

Я использую LiveValidation (http://livevalidation.com/), чтобы подтвердить форму на моем сайте для URL-адреса страницы. Моих условий:Livevalidation - Regex issue

  • не может быть пустым
  • должен начинаться с буквой
  • Без пробелов не допускаются
  • только буквенно-цифровые символов, тир и подчеркивание

До сих пор я имеют следующее:

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."}) 

Выполнено первое и второе условия. Я борюсь с третьим и четвертым условиями «Без пробелов» и «Только буквенно-цифровые символы, тире и символы подчеркивания».

Я попытался выполнить пробел и четвертое условие с помощью регулярных выражений, но он не работал, поэтому я просто отделил пробелы от исключения на данный момент. Шаблон для четвертого условия работает, если символ, который вы только что набрали, не является одним из шаблонов регулярных выражений. Но если вы продолжаете набирать «действительные» символы и иметь ранее недействительный символ, ошибка исчезает и становится действительной.

Кто-нибудь знает, как правильно сделать шаблон, чтобы поймать его, если в поле ввода есть ЛЮБЫЕ «недействительные» символы? Было бы здорово, если бы я мог объединить условие отсутствия пространства с шаблоном, если это возможно.

+0

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

+0

'/^[a-zA-Z] [a-zA-Z0-9 -_] * $ /' – ctn

+0

Спасибо, Майкл, отлично работает сейчас! – Guest

ответ

2

/^[a-zA-Z][a-zA-Z0-9_\-]*$/.

  • [a-zA-Z] означает письмо.
  • [a-zA-Z0-9_\-] означает буква, цифра, тире или символ подчеркивания.
  • * означает повторение 0 или более раз
  • ^ это начало строки
  • $ является концом строки

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

+1

отсутствует черточка ... – ctn

+0

Это работает, за исключением недостающей черты, например, ctn! Но это легко исправить. Благодаря! – Guest

+0

@Guest Я рад, что это помогло. Если это помогло вам рассмотреть возможность просмотра [this] (http://www.youtube.com/watch?v=EkluES9Rvak), мы увидели хорошие результаты, помогая новым посетителям с регулярным выражением в чат-чат regex здесь, в SO. –

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" }); 

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

0

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

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

Пожалуйста, добавьте какое-то объяснение относительно того, почему вы думаете, что это регулярное выражение будет работать. – rgettman

+0

@ rgettman: Конечно, но я думаю, что «Гость» не интересует, как вы можете видеть. –