Regex для имен netbios - PullRequest
       25

Regex для имен netbios

0 голосов
/ 29 октября 2010

Я получил эту проблему, выясняя, как построить регулярное выражение для проверки имени netbios. Согласно стандарту MS эти символы являются незаконными \ /: *? "<> |

Итак, вот что я пытаюсь обнаружить. Мой регулярное выражение выглядит так

^[\\\/:\*\?"\<\>\|]$

Но это не сработает.

Кто-нибудь может указать мне правильное направление? (не regexlib.com, пожалуйста ...) И если это имеет значение, я использую php с preg_match.

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 октября 2010

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

Так что это, вероятно, не работает, потому что строка длиной> 1 будет просто не соответствовать регулярному выражению, и, таким образом, будет рассматриваться как ОК.

Вероятно, вам не нужны начальный и конечный якоря (^ и $). Если вы удалите их, то регулярное выражение должно соответствовать одному из символов в квадратных скобках, встречающихся в любом месте входного текста, что вам и нужно.

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

1 голос
/ 29 октября 2010

У вашего регулярного выражения есть две проблемы:

  1. Вы настаиваете, чтобы совпадение охватывало всю строку.Как говорит Анджей, вы соответствуете только строкам длиной 1.
  2. вы цитируете слишком много символов.В классе символов (т. Е. []) вам нужно только заключать в кавычки символы, которые являются специальными в классах символов, например дефис, квадратная скобка, обратный слеш.*
    preg_match('/[\\/:*?"<>|]/', "foo");  /* gives 0: does not include invalid characters */
    preg_match('/[\\/:*?"<>|]/', "f<oo"); /* gives 1: does include invalid characters */
    
...