2013-07-22 2 views
2

Я хочу проверить, имеет ли текстовое поле допустимое имя каталога. Потому что я создам каталог с этим значением текстового поля.Проверка имени каталога в регексе

Другое дело, что значение должно иметь не менее 3 символов и не может содержать более 20 символов.

Как это сделать?

+0

Я бы проверял длину пути, просто попробуйте создать его и посмотреть, вызывает ли он ошибку. – Floris

ответ

4

Path.GetInvalidPathChars, где вы можете узнать, какие символы являются недействительными. Вместо того, чтобы использовать регулярное выражение, я предлагаю вам использовать Path.GetFullPath, так как это будет проверять путь для вас: он всегда будет работать лучше, чем все, что вы попытаетесь опрокинуть, и будет постоянно обновляться по мере изменения правил со временем.

Что касается его длины, используйте методы класса Path, чтобы получить компонент пути, который вы хотите проверить.

3

Нет необходимости в RegEx, это пустая трата.

public bool ValidName(string dirName) 
{ 
    char[] reserved = Path.GetInvalidFileNameChars(); 

    if (dirName.Length < 3) 
     return false; 
    if (dirName > 20) 
     return false; 

    foreach (char c in reserved) 
    { 
     if (dirName.Contains(c)) 
      return false; 
    } 

    return true; 
} 

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

+1

Может быть хорошей идеей использовать Path.GetInvalidPathChars() вместо hardcoding значений. –

+1

'/' разрешен по пути: '/ this/is/valid'. И список запрещенных символов зависит от ОС. – Floris

+0

@ the_lotus, который не работает, потому что символы, недопустимые в пути, являются подмножеством тех, которые не разрешены в имени ... Например, вы можете ввести «dir/name», который не должен проходить проверку. – evanmcdonnal

0

Easy

Это регулярное выражение, которое вы должны использовать.

^[0-9A-Za-Z_-]{3,20}$ 

"^"means starts with the characters defined in [] brackets 
"[]" represents list of allowed characters 
"0-9" represents that numbers from 0-9 can be used 
"A-Z" uppercase letters from A to Z 
"a-z" lowercase letters from a to z 
"_" underscore 
"-" dash 
"{}" represents limitations 
"{3,20}" - min 3 characters max 20 
"$" ends with the characters defined in [] 

если вы не используете^$, чем он будет искать сочетание этих букв в строке, так строка может быть 30 символов, и это будет справедливо.

Я надеюсь, что это помогает

Смежные вопросы