Лучший подход для удаления специальных символов с использованием ColdFusion и Microsoft SQL? - PullRequest
12 голосов
/ 28 сентября 2010

Я хочу удалить все специальные символы (", / {} и т. Д.) Из поля ввода, сохраняемого в виде строки в БД.

Какой наилучший подход?

Должна ли эта проверка решаться с помощью JS, ColdFusion или Microsoft SQL - может быть, всеми тремя?

Как бы я решил написать код с помощью ColdFusion или Microsoft SQL?

Ответы [ 4 ]

17 голосов
/ 28 сентября 2010

Вы имеете в виду все, что не буквенно-цифровое?

Я бы, вероятно, использовал REReplace в слое данных.

<cfqueryparam 
  cfsqltype="cf_sql_varchar" 
  value="#REReplace(myVar,"[^0-9A-Za-z ]","","all")#" 
/>

Обновление :изменено, чтобы включить "пробел".

6 голосов
/ 28 сентября 2010

Используйте регулярное выражение в Coldfusion

<cfset cleanInput = rereplace(form.input,"[^A-Za-z0-9]","","all") />

Это говорит о том, что заменяйте любой символ, который не является от A до Z или от a до z или от 0 до 9, и делайте это для всех встречающихся.

3 голосов
/ 28 сентября 2010

Вы уверены, что хотите занести в черный список только этих персонажей? Обычно более безопасный подход состоит в том, чтобы вносить в белый список только допустимые символы.

Если вы хотите обеспечить чистоту ваших данных, самое безопасное место для этого - источник, используя триггер INSERT / UPDATE.

Вы могли бы написать UDF, который делает это в T-SQL, или для лучшей производительности, реализовать его как функцию CLR, используя C # или аналогичный.

Выполнение этого только в SQL может вызвать проблемы с проверкой. Например, если пользователь ввел только недопустимые символы в обязательное поле, он, по сути, не дал вам никакого ввода, поэтому вашему графическому интерфейсу, скорее всего, придется выдать ошибку проверки. Поэтому лучше всего иметь проверочные проверки на удобство использования в своем интерфейсе и триггеры на целостность данных на сервере.

0 голосов
/ 24 мая 2012

Я использовал это как проверку, чтобы вернуть ложь, если символы не были в белом списке.

<cfif len(testString) EQ len(rereplaceNocase(testString,"[^A-Za-z0-9-+$. _[]","","all"))>
     TRUE<br>
<cfelse>
     FALSE<br>
</cfif>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...