2014-12-08 2 views
0

Я пишу код о вводе. Потому что клавиатура настроена, поэтому могут отображаться символы «/[]#*._», но я запрещаю это! На самом деле я могу написать код, как показано ниже:Как мне использовать Regex с указанным символом?

if (!_UID.IndexOf(@"/").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 
    else if (!_UID.IndexOf(@"\").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 
    else if (!_UID.IndexOf(@"[").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 
    else if (!_UID.IndexOf(@"]").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 
    else if (!_UID.IndexOf(@"#").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 
    else if (!_UID.IndexOf(@"*").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 
    else if (!_UID.IndexOf(@".").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 
    else if (!_UID.IndexOf(@"_").Equals(-1)) 
    { 
     return ErrorMessage; 
    } 

Но это так дешево !! Очевидно, что я хочу запретить эти символы в TextBox, и я надеюсь, что смогу выразить код с помощью Regex, как мне это кодировать?

ответ

0

Вы можете сделать это легче делать что-то вроде этого

foreach(char c in "/[]#*._"){ 
    if(!_UID.IndexOf(c.ToString()) == -1) return ErrorMessage; 
} 

Но если вы действительно хотите регулярное выражение, вы могли бы сделать

if(!Regex.IsMatch(_UID, "[/[]#*._]")){ 
    return ErrorMessage; 
} 
+1

Так жаль Regex, это не правильно .... Я пробовал вход, такие как «a123456789» и «A.12345678», результат одинаковы. В этом случае, "." запрещается ~ –

0
if(!Regex.IsMatch(_UID, "[/[]#*._]")){ 
    return ErrorMessage; 
} 

Это неправильно в двух аспекты:

  • Это ошибка, если символ запрещен, поэтому ! неуместен; исправить:
    if (Regex.IsMatch(…)) return ErrorMessage;
  • [/[]#*._] является не класса символов с набором символов /[]#*._, потому что первая ] заканчивает класс символов [/[], который затем следует #*._]; это будет соответствовать чему-то вроде "…[###x_]…", а не тому, что нужно. Чтобы включить ] в класс символов, его можно разместить сразу после открывающей скобки. Правильно:
    if (Regex.IsMatch(_UID, "[]/[#*._]")) return ErrorMessage;
Смежные вопросы