2011-07-20 11 views
22

que estoy tratando de probar una cadena de nombre de archivo con este patrón:nombre del archivo de prueba con expresión regular

^[A-Za-z0-9-_,\s]+[.]{1}[A-Za-z]{3}$ 

quiero asegurar que no es una extensión de tres letras y permiten letras, números y estos símbolos: - _, \ s para precederlo, pero no quiero tener que incluir todas las letras y caracteres en el nombre del archivo. Podría simplemente usar un * en lugar de un + pero que coincidiría con 0 o más, lo que no sería un nombre de archivo válido.

Éstos son algunos ejemplos de cómo la regla debe reaccionar:

Correct file name.pdf - true 
Correct, file name.pdf - true 
Correct_file_name.pdf - true 
Correctfilename.pdf - true 
Incorrect &% file name.pdf - false 
Incorrect file name- false 

Sería muy bueno si alguien me podría apuntar en la dirección correcta.

Gracias

Respuesta

34

Usted podría utilizar estas expresiones en su lugar:

  • \w - es lo mismo que [a-zA-Z0-9_]
  • \d - es lo mismo que [0-9]
  • \. - es lo mismo que [.]{1}

que haría su expresión regular:

^[\w,\s-]+\.[A-Za-z]{3}$ 

Tenga en cuenta que un guión literal en una clase de caracteres debe ser el primero o el último o escapó (lo puse pasado), pero se puso en medio, que se convierte incorrectamente una rango.

Observe que el último [a-zA-Z] no puede reemplazarse por \w porque \w incluye el carácter de subrayado y los dígitos.

EDITADO: @tomasz tiene razón! \w == [a-zA-Z0-9_] (confirmado here), así que alteré mi respuesta para eliminar el innecesario \d de la primera clase de caracteres.

+4

'\ w' es generalmente [a-zA-Z0-9_]; es por eso que no soy un gran admirador de la clase, ya que debes recordar esta definición de palabra específica. – tomasz

+1

+1 De mí, simpática captura que '\ w' incluye' _'. –

+0

Fantástico, eso funciona un placer gracias! ¿Puedes explicar por qué mi patrón no funcionó? ¿Es el hecho de que me perdí la \ al definir mi punto final? –

2

Esta pregunta se solicitó específicamente para permitir una extensión de tres letras.

Para cualquier persona que viene de DuckDuckGo como yo (sí, no se debe utilizar Google: p), estas pruebas de expresiones regulares para nombres de archivo válidos y rutas de archivos en Windows, Unix ES macOS:

^[^<>:;,?"*|/]+$ 

Nota: En Windows, \ no está permitido en nombres de archivo, pero la expresión regular anterior funciona para verificar rutas válidas en Windows. Incluya \\ entre los corchetes ^[...]+$ si desea verificar los nombres de archivo válidos y no verificar las rutas.

Cuestiones relacionadas