Rohit Pathak:
¿Cómo se crea una expresión regular que detecta los números hexadecimales que tienen una longitud que cumpla los siguientes requisitos: incluso, mayor que o igual a 10, y menos de 256.
Por ejemplo:
0x1234567890 Accepted
0x123456789 rejected
123456789 rejected
1234567890 accepted
12345678901 rejected
0x123456789012 accepted
123456789012 accepted
La expresión regular:
^(0?[xX]?([^0-9a-fA-F]*(([0-9a-fA-F][0-9a-fA-F])+[^0-9a-fA-F]*)*))$
He tratado de la expresión regular anterior, pero que no está funcionando como se espera, es la comprobación de longitud, incluso aunque no comprobando que si la entrada es mayor que o iguales a 10 o no.
aquí 0x o 0X es opcional .. excluye que la longitud debe ser mayor o igual a 10
Wiktor Stribiżav:
Puedes utilizar
^(?=.{10,255}$)(?:0x)?[0-9a-fA-F]{2}(?:[0-9a-fA-F]{2})*$
Vea la demostración de expresiones regulares . Tenga en cuenta que en Java, puede reemplazar [0-9a-fA-F]
con \p{XDigit}
.
detalles
^
- inicio de la cadena (en implícitamatches
)(?=.{10,255}$)
- de 10 a 255 caracteres deben estar al final de la cadena (en este caso, el$
es obligatoria)(?:0x)?
- un opcional0x
secuencia Char[0-9a-fA-F]{2}
- dos caracteres hexadecimales(?:[0-9a-fA-F]{2})*
- 0 o más secuencias de caracteres dobles hexagonales$
- final de la cadena (en implícitamatches
)
En Java, es posible utilizarlo como
str.matches("(?=.{10,255}$)(?:0x)?[0-9a-fA-F]{2}(?:[0-9a-fA-F]{2})*")
O
str.matches("(?=.{10,255}$)(?:0x)?\\p{XDigit}{2}(?:\\p{XDigit}{2})*")