2012-10-02 36 views
6

Necesito validar el nombre de una carpeta en C#.Validar el nombre de la carpeta en C#

me han tratado la siguiente expresión regular:

^(.*?/|.*?\\)?([^\./|^\.\\]+)(?:\.([^\\]*)|)$ 

pero falla, y también he intentado usar GetInvalidPathChars().

Se produce un error cuando intento usando P:\abc como un nombre de carpeta es decir Driveletter:\foldername

Puede alguien sugerir por qué?

+0

Lo mismo ocurre con una carta de expresiones regulares unidad de validación + foldername –

+0

Pregunta: ¿En qué situación está un usuario va a tener que escribir manualmente una ruta de manera específica que tiene que regex que? – Amicable

+0

En Windows, ciertos 'nombres de dispositivo' también están reservados, como 'COM1' o 'AUX' –

Respuesta

9

que podría hacer que de esta manera (usando System.IO.Path.InvalidPathChars constante):

bool IsValidFilename(string testName) 
{ 
    Regex containsABadCharacter = new Regex("[" + Regex.Escape(System.IO.Path.InvalidPathChars) + "]"); 
    if (containsABadCharacter.IsMatch(testName) { return false; }; 

    // other checks for UNC, drive-path format, etc 

    return true; 
} 

[editar]
Si desea una expresión regular que valida una ruta de carpeta, entonces se podría utilizar éste:

Regex regex = new Regex("^([a-zA-Z]:)?(\\\\[^<>:\"/\\\\|?*]+)+\\\\?$");

[editar 2]
he recordado una cosa difícil que le permite comprobar si la ruta es correcta:

var invalidPathChars = Path.GetInvalidPathChars(path)

o (para archivos):

var invalidFileNameChars = Path.GetInvalidFileNameChars(fileName)

+0

esto falla porque tiene en cuenta la letra de unidad –

+0

Así que quiere 'P: \ foldername' para ser un nombre de carpeta correcto ? – Nickon

+0

sí, falla. La expresión regular no está funcionando –

0

validar un nombre de carpeta correctamente puede ser toda una misión. Ver la publicación de mi blog Taking data binding, validation and MVVM to the next level - part 2.
No se deje engañar por el título, se trata de validar las rutas del sistema de archivos, e ilustra algunas de las complejidades involucradas en el uso de los métodos proporcionados en .Net Framework. Si bien es posible que desee utilizar una expresión regular, no es la forma más confiable de hacer el trabajo.

-1

esto es expresión regular que debe utilizar:

Regex regex = new Regex("^([a-zA-Z0-9][^*/><?\"|:]*)$"); 
if (!regex.IsMatch(txtFolderName.Text)) 
{ 
    MessageBox.Show(this, "Folder fail", "info", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    metrotxtFolderName.Focus(); 
} 
Cuestiones relacionadas