visual quick online matches c# regex

quick - Expresiones regulares en C#para validación de nombre de archivo



regex quick reference (4)

Como ya se respondió, GetInvalidFileNameChars debería hacerlo por usted, y ni siquiera necesita la sobrecarga de las expresiones regulares:

if (proposedFilename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) { MessageBox.Show("The filename is invalid"); return; }

¿Cuál es una buena expresión regular que puede validar una cadena de texto para asegurarse de que sea un nombre de archivo de Windows válido? (Tampoco tiene //:*?"<>| Caracteres).

Me gustaría usarlo de la siguiente manera:

// Return true if string is invalid. if (Regex.IsMatch(szFileName, "<your regex string>")) { // Tell user to reformat their filename. }


Esto no es tan simple como simplemente verificar si el nombre del archivo contiene cualquiera de System.IO.Path.GetInvalidFileNameChars (como ya se mencionó en algunas otras respuestas).

Por ejemplo, qué pasa si alguien ingresa un nombre que no contiene caracteres no válidos pero tiene 300 caracteres (es decir, más que MAX_PATH); esto no funcionará con ninguna de las API de archivos .NET, y solo tiene soporte limitado en el resto de las ventanas. la sintaxis /? / path. Necesita contexto en cuanto a la duración del resto de la ruta para determinar cuánto tiempo puede ser el nombre del archivo. Puede encontrar más información sobre este tipo de cosas aquí .

En última instancia, todos sus cheques pueden hacer de manera confiable la prueba de que el nombre de un archivo no es válido o darle una estimación razonable de si es válido. Es virtualmente imposible probar que el nombre del archivo es válido sin realmente intentar usarlo. (Y aun así, ¿tiene problemas como qué pasa si ya existe? Puede ser un nombre de archivo válido, pero ¿es válido en su escenario tener un nombre duplicado?)


Por qué no usar la clase System.IO.FileInfo, junto con la clase DirectoryInfo tiene un conjunto de métodos útiles.


Path.GetInvalidFileNameChars: no es una buena manera. Prueba esto:

if(@"C:/A.txt".IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) { MessageBox.Show("The filename is invalid"); return; }