2013-11-11 9 views
0

Ive получил старую форму, которая все еще должна использовать cfform для проверки на стороне клиента.CFFORM Regex не будет правильно проверяться

У меня также есть шаблон регулярного выражения для проверки, и я пытаюсь проверить строку номера телефона.

<cfinput class="form-field" required="yes" value="#session.userdetails.shipping.deliveryaddress.telephoneNumber#" message="Please Enter your Phone Number" name="telephoneNumber" type="text" id="PhoneNumber" validate="regex" pattern="^[0-9\.\-' ']+$" maxlength="25" size="26" /> 

Ive попробовал несколько различных шаблонов для проверки строки в определенном формате.

Мне это нужно, чтобы быть не менее 7 символов может содержать пробелы должны быть числовыми

^[0-9\.\-' ']{7}+$ 
^[0-9\.\-' ']{7,}+$ 

Любые идеи о том, почему это обыкновение проверять мои требования?

ответ

0

«Любые идеи о том, почему это не подтверждается моими требованиями?»

Поскольку регулярное выражение вы используете содержит синтаксис не поддерживается JS - если смотреть в консоли браузера вы увидите сообщение об ошибке при попытке проверить. (Возможно, вам нужно будет выбрать опцию «persist», чтобы увидеть ее.)

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

Решение просто использовать {7,} без + после него, и ваша картина будет почти работа по назначению: кавычки вокруг пространства в классе символов не нужны (и в частности, позволяет этот символ) , и точка не нуждается в экранировании в символьном классе - так что шаблон, который вы хотите, либо ^[0-9.\- ]{7,}$, либо ^[\d .-]{7,}$.


В качестве быстрой заметки о притяжательных кванторах по сравнению с другими типами:

  • x{7,} является квантором с жадного поведения, а это означает, что соответствует й стольких раз, сколько это возможно, но требуется не менее семи раз.
  • x{7,}+ является квантор с притяжательной поведения, а это означает, что соответствует х столько раз, сколько найдено, но по крайней мере семь раз требуется.
  • x{7,}? является квантором с ленивым поведения, то есть он пытается соответствовать й в семь раз, и после этого , как несколько, как это может уйти с на матч успешно.
  • x+ является сокращением на x{1,}, и вы можете иметь x++ и x+?, чтобы перейти от жадного квантификатора по умолчанию.

Опять же, реализация регулярных выражений, используемая JS и CF, не поддерживает притяжательные кванторы (следовательно, почему недействительный синтаксис), но они поддерживают как жадные (по умолчанию), так и ленивые.

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