-2

Mi duda es la siguiente: Me llega un archivo y quiero validar un campo.

  • debe ser alfanumérico
  • puede tener ceros en diferentes lugares ejemplo (A1840, 02749, 0AG6384, MVS100)
  • NO DEBE
    • aceptar puros ceros ejemplo (0,0000,0000000,00000000)
    • pasar de 20 carácteres.

Lo estoy realizando en un Shell en red hat, está separado por pipes ejemplo

AV193840|01

El folio es la primera columna, eso ya lo hago...ya obtengo el dato, solo quiero saber cómo realizar esa validación de que no sea un folio con puros ceros "000000" de 0 a 20 ceros. Lo guardo en la variable vfolio

Ruslan López
  • 10,060
  • 11
  • 35
  • 68
Marianne
  • 11
  • 3
  • Bienvenido a StackOverflow en español, te invito a leer [¿Cómo elaboro una buena pregunta?](https://es.stackoverflow.com/help/how-to-ask). A tu pregunta le falta más información, por ejemplo ¿el archivo tiene varias líneas? ¿cada línea tiene varios campos? ¿cómo están separados los campos? ¿qué comando utilizas para _procesar_ el archivo?, ¿qué cosas ya has intentado y no han funcionado?. Lee el artículo y luego edita tu pregunta para mejorar tus probabilidades de obtener buenas respuestas. Un saludo. – jachguate Jan 30 '19 at 20:51

1 Answers1

0

Yo usaría una expresión regular de la forma:

\((?!00000,\s00000,\s0000000,\s000000)(?!([\d,\s]*[A-Z][\d,\s]*){8,})([A-Z0-9]{5},\s){2}([A-Z0-9]{7},\s)[A-Z0-9]{6}\)

Como verás tiene algunos grupos con los símbolos (?!) a eso se le conoce como negative lookahead, es decir, nos asegura que nuestro resultado no contiene eso o la expresión regular no se cumple, por ello pongo primero tus dos casos frontera:

  • Qué no tenga puros ceros

    (?!00000,\s00000,\s0000000,\s000000)
    
  • Qué no tenga más de 7 carcateres alfabéticos

    (?!([\d,\s]*[A-Z][\d,\s]*){8,})
    

Después de ello cualquier expresión que quieras usar para validar tu formato.

Quiero hacerte notar que este tipo de pensamiento te orienta a una solución recursiva, y que idealmente debes usar una heurística de tipo estadística para maximizar la velocidad a que encuentra las coincidencias.

De igual manera te conmino a visitar nuestro wiki de expresiones regulares por si alguna de las funcionalidades allí citadas te sirviera.

Ruslan López
  • 10,060
  • 11
  • 35
  • 68