Найти определенный тег [duplicate]

Имя файла не может содержать символы из символов Path.GetInvalidPathChars () , + и # и других конкретных имен. Мы объединили все проверки в один класс:

  public static class FileNameExtensions {private static readonly Lazy & lt; string [] & gt;  InvalidFileNameChars = new Lazy & lt; string [] & gt; (() = & gt; Path.GetInvalidPathChars () .Union (Path.GetInvalidFileNameChars () .Union (new [] {'+', '#'})). Выберите (c  = & gt; c.ToString (CultureInfo.InvariantCulture)). ToArray ());  private static readonly HashSet & lt; string & gt;  ЗапрещеноNames = new HashSet & lt; string & gt;  {@ "aux", @ "con", @ "clock $", @ "nul", @ "prn", @ "com1", @ "com2", @ "com3", @ "com4", @ "com5  ", @" com6 ", @" com7 ", @" com8 ", @" com9 ", @" lpt1 ", @" lpt2 ", @" lpt3 ", @" lpt4 ", @" lpt5 ", @" lpt6  ", @" lpt7 ", @" lpt8 ", @" lpt9 "};  public static bool IsValidFileName (string fileName) {return! string.IsNullOrWhiteSpace (fileName) & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp;  fileName.All (o = & gt;! IsInvalidFileNameChar (o)) & amp; & amp; & amp;  ! IsProhibitedName (Filename);  } public static bool IsProhibitedName (string fileName) {return Запрещенные имена.Contains (fileName.ToLower (CultureInfo.InvariantCulture));  } private static string ReplaceInvalidFileNameSymbols ([CanBeNull] это строковое значение, string replacementValue) {if (value == null) {return null;  } return InvalidFileNameChars.Value.Aggregate (новый StringBuilder (значение), (sb, currentChar) = & gt; sb.Replace (currentChar, replacementValue)). ToString ();  } public static bool IsInvalidFileNameChar (значение char) {return InvalidFileNameChars.Value.Contains (значение.ToString (CultureInfo.InvariantCulture));  } public static string GetValidFileName ([NotNull] это строковое значение) {return GetValidFileName (значение, @ "_");  } public static string GetValidFileName ([NotNull] это строковое значение, string replacementValue) {if (string.IsNullOrWhiteSpace (значение)) {throw new ArgumentException (значение @ должно быть не пустым), nameof (value));  } if (IsProhibitedName (значение)) {return (string.IsNullOrWhiteSpace (replacementValue)? @ "_": replacementValue) + значение;  } return ReplaceInvalidFileNameSymbols (value, replacementValue);  } public static string GetFileNameError (string fileName) {if (string.IsNullOrWhiteSpace (имя_файла)) {return CommonResources.SelectReportNameError;  } if (IsProhibitedName (имя_файла)) {return CommonResources.FileNameIsProhibited;  } var invalidChars = fileName.Where (IsInvalidFileNameChar) .Distinct (). ToArray ();  if (invalidChars.Length & gt; 0) {return string.Format (CultureInfo.CurrentCulture, invalidChars.Length == 1? CommonResources.InvalidCharacter: CommonResources.InvalidCharacters, StringExtensions.JoinQuoted (@ ",", @ "'", invalidChars.  Выберите (c = & gt; c.ToString (CultureInfo.CurrentCulture))));  } return string.Empty;  }}  

Метод GetValidFileName заменяет все неверные данные на _ .

11
задан PlutoTX 7 October 2012 в 08:31
поделиться

5 ответов

>>> s="aaa?aaa"
>>> import re
>>> re.findall(r'aaa\?aaa', s)
['aaa?aaa']

Причина /aaa?aaa не будет совпадать внутри вашего URL-адреса, потому что ? начинает новый запрос GET.

Итак, соответствующая часть URL-адреса только до первой «aaa». Остальная '? Aaa' представляет собой новую строку запроса , разделенную '?' mark, содержащий переменную «aaa», передаваемую как параметр GET.

То, что вы можете сделать здесь, кодирует переменную, прежде чем она попадает в URL-адрес. Закодированная форма ? - %3F.


Вы также не должны совпадать с запросом GET, например /?code=authenticationcode, с использованием регулярного выражения. Вместо этого, сопоставьте свой URL с / с помощью r'^$'. Django передаст переменную code в качестве параметра GET для объекта request, который вы можете получить в своем представлении, используя request.GET.get('code').

13
ответ дан Anuj Gupta 15 August 2018 в 23:27
поделиться

Django's urls.py не анализирует строки запроса, поэтому нет способа получить эту информацию в файле urls.py.

Вместо этого проанализируйте его в своем представлении:

def foo(request):
   code = request.GET.get('code')
   if code:
      # do stuff
   else:
      # No code!
1
ответ дан Burhan Khalid 15 August 2018 в 23:27
поделиться

«Как сопоставить«? », это особенное?» Да, но вы экономите его, используя обратную косую черту. Тем не менее, я не вижу, где вы учитывали ведущую косую черту. Этот бит просто нужно добавить в:

r'^/\?code=(?P<code>.*)$'
0
ответ дан Kenneth K. 15 August 2018 в 23:27
поделиться

подавляет метасимволы регулярных выражений с помощью []

>>> s
'/?code=authenticationcode'
>>> r=re.compile(r'^/[?]code=(.+)')
>>> m=r.match(s)
>>> m.groups()
('authenticationcode',)
0
ответ дан thkang 15 August 2018 в 23:27
поделиться
  • 1
    Что происходит, когда он решает «подавить»? метасимволы следующим образом: [^?$]? Побег будет лучшим подходом. – Kenneth K. 7 October 2012 в 09:14

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

Нравится: http://www.example.com?variable=1&another_variable=2

Заменить его или сбежать. Вот небольшая документация .

2
ответ дан Thomas 15 August 2018 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: