
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 $?

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:


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.
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 eltel
escriba en supattern
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