Регулярное выражение в BlueDragon 7.1 позволяет использовать знак $

Я использую валидацию Bluefragon cfform:

<cfinput validateat="onServer" validate="regex" pattern="^[a-zA-Z0-9 ]+$"  name="COMPANYDBA" />

Но эта модель не дает правильного результата. Что-то не так со знаком доллара: ^[a-zA-Z0-9 ]+$

Ожидаемый результат: без специальных символов

Фактический результат: никаких специальных символов, за исключением того, что он допускает знак $

Почему в мире это позволило бы знак доллара в строке?

2 ответа

Решение

Старый вопрос, но он указан как оставшийся без ответа, так что вот (слишком длинный) ответ, чтобы прекратить это дело (во всяком случае, как только кто-то проголосует против него).

Маловероятно, что источник для cfform существенно изменился между BD7 и OpenBD - потому что в наши дни никто не рекомендует использовать cfform - так вот код OBD, который генерирует HTML:

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fsrc%2Fcom%2Fnaryx%2Ftagfusion%2Fcfm%2Fcfform%2FcfAbstractFormTag.java

Этот код говорит нам, что с предоставленными атрибутами скрытое поле формы с суффиксом _CFFORMREGEX выводится с шаблоном для тестирования.
(Что, конечно, не является реальной проверкой на стороне сервера, несмотря на то, что validateat="onserver" предполагает, и, следовательно, еще одна причина не использовать cfform).

После отправки это поле формы выбирается и используется через файл cfFormData.java:

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fsrc%2Fcom%2Fnaryx%2Ftagfusion%2Fcfm%2Fengine%2FcfFormData.java

Который, если вы пройдете через это, в конечном итоге пропустит com.nary.util.string.regexMatches который использует Apache ORO для проверки соответствия:

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fsrc%2Fcom%2Fnary%2Futil%2Fstring.java

Использование SINGLELINE_MASK означает ^ а также $ будет выполнять их обычное начало / конец совпадения контента (не начало / конец строк) и что . включает в себя новые строки.

При этом мы можем категорически заявить, что, если ^[a-zA-Z0-9 ]+$ затем $ не будут приняты, поэтому в исходном вопросе должно быть больше, чем было выявлено.

Конечно, вместо того, чтобы беспокоиться обо всем этом, наиболее подходящее решение: прекратить использовать cfform.

Существует множество превосходных вариантов для правильной проверки формы, см. Список Чарли Арехарта: http://cf411.com/form

Попробуйте использовать \A а также \Z вместо ^ а также $ соответственно.

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