¿Debo usar ^ y $ en la validación del patrón de expresión regular de entrada html5?

6 minutos de lectura

¿Debo usar ^ y en la validacion del patron
Marco Luglio

En su mayoría, he visto ejemplos sin los caracteres ^ (circunflejo) y $ (moneda o dólar) para marcar el comienzo y el final de la cadena que se empareja. Sin embargo, no encontré nada al respecto en la especificación html5. ¿Están implícitos en el patrón? La especificación html5 establece que están implícitas.

La expresión regular del patrón compilado, cuando se compara con una cadena, debe tener su inicio anclado al inicio de la cadena y su final anclado al final de la cadena. Esto implica que el lenguaje de expresión regular utilizado para este atributo es el mismo que el utilizado en JavaScript, excepto que el atributo de patrón se compara con el valor completo, no solo con cualquier subconjunto (algo así como si implicara un ^(?: al principio del patrón y un )$ al final).

En las entradas de tipo = “texto”, el patrón funciona bien con cualquier formato, sin embargo, en las entradas de tipo = “tel”, tuve que eliminar los caracteres para que la expresión regular funcionara como se esperaba. Lo he probado tanto en Opera como en Firefox.

¿Es esto un error del navegador? ¿Debo presentar un error en bugzilla, etc.?


Editar: Parece que me he topado con un error extraño, porque no puedo crear un caso de prueba reducido. Una simple entrada en una página no muestra el comportamiento indicado anteriormente. Sin embargo, la pregunta permanece. ¿Debería o no debería usar los malditos anclajes ^ y $?

  • developer.mozilla.org/en/HTML/Forms_in_HTML menciona esto en el tel aporte: Los saltos de línea se eliminan automáticamente del valor de entrada, pero no se aplica ninguna otra sintaxis, porque los números de teléfono varían mucho a nivel internacional. Puede usar atributos como patrón y longitud máxima para restringir los valores ingresados ​​en el control.. No menciona nada específico sobre el tel escriba en su pattern descripción del atributo.

    – La uña

    4 de febrero de 2012 a las 16:54

  • De hecho, si reviso con Firefox, no veo ningún comportamiento extraño en el tel entradas. ¿Podría dar un ejemplo completo que incluya el código, lo que esperaba y lo que obtuvo en su lugar?

    – La uña

    4 de febrero de 2012 a las 16:59


  • Sí, acabo de darme cuenta de eso y agregué una edición a la pregunta. Mi formulario es un poco complicado de publicar aquí, pero veré qué puedo hacer.

    – Marco Luglio

    4 de febrero de 2012 a las 17:03

  • ¿Puedes al menos publicar el código exacto del input elemento al que se refiere? Y por favor proporcione un Enlace luego te refieres a una especificación (espero que sea de W3.org)

    – La uña

    4 de febrero de 2012 a las 17:16


  • Y como establece la especificación W3, el ^ y $ están implícitos. Esto significa que no necesita ponerlos allí explícitamente.

    – La uña

    4 de febrero de 2012 a las 17:23

¿Debo usar ^ y en la validacion del patron
marca amery

La sección del estándar HTML sobre los pattern atributo todavía afirma que siempre está anclado al principio y al final, como ya se citó en la pregunta:

La expresión regular del patrón compilado, cuando se compara con una cadena, debe tener su inicio anclado al inicio de la cadena y su final anclado al final de la cadena.

Podemos usar un fragmento de prueba simple para confirmar este comportamiento:

<form>
  <input required pattern="abc">
  <button>Submit</button>
</form>

Notará que el formulario anterior rechaza valores de foo abc y abc foo; solo escribiendo exactamente la cadena abc será aceptado. Esto demuestra que pattern="abc" es equivalente a pattern="^abc$" y que no es necesario especificar el ^ y $ explícitamente.

Por lo que puedo decir, la respuesta de la competencia aquí que afirma que los navegadores solían implementar un comportamiento diferente, en violación de las especificaciones, es completamente falsa. Puedes descargar Firefox 15 desde https://ftp.mozilla.org/pub/firefox/releases/15.0/win32/en-GB/ y pruebe el fragmento anterior usted mismo, y verá que el comportamiento es como en un navegador moderno. O, dado que probablemente no te moleste, puedes ver esta captura de pantalla mía haciéndolo por ti:

Captura de pantalla de esta respuesta en Firefox 15 que muestra el formulario anterior que rechaza la entrada de "abc foo"

1647571450 3 ¿Debo usar ^ y en la validacion del patron
escarabajo

Según la norma, la expresión regular está anclada al principio y al final. Sin embargo, en la práctica (probado FF 15 y Chrome 21) ¡está anclado solo al principio!

Entonces, si desea ser compatible tanto con el estándar como con la realidad, debe anclar su expresión regular con un $ explícitamente. Ya sea para usar ^ también depende de usted, no es necesario.

Por supuesto que sabes que los números de teléfono vienen en diferentes formas,

p.ej

  • mientras esté en Viena, Austria, marque “4000” lo conectará con el Ayuntamiento.
  • mientras esté en Innsbruck, Austria, debe marcar “014000” para llamar al Ayuntamiento de Viena
  • mientras esté en Nueva York, EE. UU., debe marcar +4314000 para marcar el mismo número.

Esto tiene razones históricas, con el antiguo sistema mecánico delegando el trabajo de conectar la llamada de un dispositivo al siguiente con cada dígito (Esta es también la razón por la que las extensiones están al final de un número, y no al principio, aot the DNS donde puede extender sus nombres de dominio al frente, pero no al final)

Ahora una expresión regular con ambos anclajes ^ y $ coincidirá con un número de teléfono solamente, si se proporciona exactamente de la misma forma. con solo el $ Anchor coincidirá de manera confiable con el mismo número de teléfono, siempre que no se proporcione una extensión diferente. Sin ancla, es decir, cayendo ^ y $ coincidirá independientemente de los códigos de ubicación y las extensiones, pero introducirá falta de fiabilidad:

El uso de “4000” como patrón para el Ayuntamiento de Viena coincidirá con “4000”, “014000” y “+4314000”, pero también coincidirá con “+44140001”, que es un banco alemán.

  • Estoy un poco confundido ahora. Tal vez debería haber publicado un ejemplo con mi pregunta. Usando “^[\d]{10}$”, por ejemplo, no coincide con 1234567890 en una entrada de teléfono, pero debería, ¿no?

    – Marco Luglio

    4 de febrero de 2012 a las 16:29

  • ¿De dónde viene esta charla sobre números de teléfono? ¿Ha cambiado la pregunta?

    – Borodin

    4 de febrero de 2012 a las 16:41

  • No, habla de la entrada TEL específicamente

    – Marco Luglio

    4 de febrero de 2012 a las 16:43

  • Poniéndolo en contexto, recomendaría usar el extremo ancho ($), pero no el ancla de inicio (^) – para mí, este es el punto dulce entre la confiabilidad y la amplitud del partido.

    – Eugen Riek

    4 de febrero de 2012 a las 22:06

  • -1 porque la mayor parte de esta respuesta no aborda la pregunta que se hizo, y la parte que finalmente lo hace abordarlo, en los dos párrafos finales, está mal. <input type="tel" pattern="4000"> rechazará la entrada de 014000contrario a esta respuesta.

    –Mark Amery

    6 de diciembre de 2018 a las 23:17

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad