ASP.NET: безопасно ли использовать объект Regex области приложения? - PullRequest
3 голосов
/ 28 ноября 2011

У меня есть сложное регулярное выражение, которое используется, чтобы помочь убрать HTML из пользовательского ввода.Я знаю, что .NET кеширует статические вызовы Regex в некоторой степени, но этот большой и часто используется, поэтому я хотел бы, чтобы он зависал.

В проекте веб-сайта мне бы хотелосьчтобы определить его как общий объект, внутри вспомогательного класса в App_Code, например:

AppHelper.vb в App_Code:

Public Class AppHelper

  Private Shared _rxRemoveHTML As New Regex("(<[\s\S]*?(style|script)[\s\S]*?>[\s\S]*?</[\s\S]*?(style|script)[\s\S]*?>)|<[^<>]*>|&#[0-9a-z]+;|&#|<|>|\\|`|\t", RegexOptions.IgnoreCase + RegexOptions.Multiline)

Это сохранит его на всю жизнь приложения.

Публичная функция работает:

Public Shared Function RemoveHTML(ByVal sIn As String) As String
  Return _rxRemoveHTML.Replace(sIn, "")
End Function

Вопрос в том, безопасен ли этот поток и в остальном ли он подходит для веб-приложения?

1 Ответ

5 голосов
/ 28 ноября 2011

Да, это совершенно безопасно. Взято из MSDN :

Резьба безопасности

Класс Regex является неизменным (только для чтения) и потокобезопасным. Объекты Regex могут быть созданы в любом потоке и распределены между потоками

...