Parece que el minlength
atributo de un <input>
campo no funciona.
¿Hay algún otro atributo en HTML5 con cuya ayuda pueda establecer la longitud mínima de un valor para los campos?
Parece que el minlength
atributo de un <input>
campo no funciona.
¿Hay algún otro atributo en HTML5 con cuya ayuda pueda establecer la longitud mínima de un valor para los campos?
Respuestas:
Puedes usar el pattern
atributo . El required
atributo también es necesario; de lo contrario, un campo de entrada con un valor vacío se excluirá de la validación de restricción .
<input pattern=".{3,}" required title="3 characters minimum">
<input pattern=".{5,10}" required title="5 to 10 characters">
Si desea crear la opción de usar el patrón para "vacío o longitud mínima", puede hacer lo siguiente:
<input pattern=".{0}|.{5,10}" required title="Either 0 OR (5 to 10 chars)">
<input pattern=".{0}|.{8,}" required title="Either 0 OR (8 chars minimum)">
oninvalid="this.setCustomValidity('Your message')"
setCustomValidity
, continuará mostrándole el mensaje de error incluso después de corregir la entrada. Puede usar el siguiente onchange
método para contrarrestar esto. oninvalid="this.setCustomValidity('Field must contain min. 5 characters')" onchange="try{setCustomValidity('')}catch(e){}"
No es una minlength
característica en HTML5 especificaciones ahora, así como la validity.tooShort
interfaz.
Ambos están ahora habilitados en versiones recientes de todos los navegadores modernos. Para más detalles, consulte https://caniuse.com/#search=minlength .
minlength
atributos desde la versión 51 .
Aquí hay una solución solo para HTML5 (si desea validación de longitud mínima 5, longitud máxima 10 caracteres)
http://jsfiddle.net/xhqsB/102/
<form>
<input pattern=".{5,10}">
<input type="submit" value="Check"></input>
</form>
title
atributo con el mensaje requerido.
pattern
respuesta se ha dado unos meses antes . ¿Cómo es mejor esta respuesta?
Sí, ahí está Es como la longitud máxima. Documentación de W3.org: http://www.w3.org/TR/html5/forms.html#attr-fe-minlength
En caso de minlength
que no funcione, use el pattern
atributo mencionado por @ Pumbaa80 para la input
etiqueta.
Para textarea:
Para configurar max; use maxlength
y por min vaya a este enlace .
Aquí encontrará tanto para máx. Como para mín.
Utilicé maxlength y minlength con o sin required
y me funcionó muy bien para HTML5.
<input id="passcode" type="password" minlength="8" maxlength="10">
``
El atributo minLength (a diferencia de maxLength) no existe de forma nativa en HTML5. Sin embargo, hay algunas formas de validar un campo si contiene menos de x caracteres.
Se da un ejemplo usando jQuery en este enlace: http://docs.jquery.com/Plugins/Validation/Methods/minlength
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
<script type="text/javascript">
jQuery.validator.setDefaults({
debug: true,
success: "valid"
});;
</script>
<script>
$(document).ready(function(){
$("#myform").validate({
rules: {
field: {
required: true,
minlength: 3
}
}
});
});
</script>
</head>
<body>
<form id="myform">
<label for="field">Required, Minimum length 3: </label>
<input class="left" id="field" name="field" />
<br/>
<input type="submit" value="Validate!" />
</form>
</body>
</html>
No HTML5, pero práctico de todos modos: si usa AngularJS , puede usarlo ng-minlength
tanto para entradas como para áreas de texto. Ver también este Plunk .
data-ng-minlength
pero ¿por qué un desarrollador se preocuparía por los estándares? > __>
data-ng-minlength
así .
Mi solución para textarea usando jQuery y combinando HTML5 requirió validación para verificar la longitud mínima.
$(document).ready(function(){
$('form textarea[minlength]').on('keyup', function(){
e_len = $(this).val().trim().length
e_min_len = Number($(this).attr('minlength'))
message = e_min_len <= e_len ? '' : e_min_len + ' characters minimum'
this.setCustomValidity(message)
})
})
<form action="">
<textarea name="test_min_length" id="" cols="30" rows="10" minlength="10"></textarea>
</form>
minlength
El atributo ahora es ampliamente compatible en la mayoría de los navegadores .
<input type="text" minlength="2" required>
Pero, como con otras características HTML5, IE11 no se encuentra en este panorama. Por lo tanto, si tiene una amplia base de usuarios de IE11, considere usar el pattern
atributo HTML5 que es compatible casi en todos los ámbitos en la mayoría de los navegadores (incluido IE11).
Para tener una implementación agradable y uniforme y quizás extensible o dinámica (basada en el marco que genera su HTML), votaría por el pattern
atributo:
<input type="text" pattern=".{2,}" required>
Todavía hay un pequeño problema de usabilidad cuando se usa pattern
. El usuario verá un mensaje de error / advertencia no intuitivo (muy genérico) cuando lo use pattern
. Vea este jsfiddle o debajo:
<h3>In each form type 1 character and press submit</h3>
</h2>
<form action="#">
Input with minlength: <input type="text" minlength="2" required name="i1">
<input type="submit" value="Submit">
</form>
<br>
<form action="#">
Input with patern: <input type="text" pattern=".{2,}" required name="i1">
<input type="submit" value="Submit">
</form>
Por ejemplo, en Chrome (pero similar en la mayoría de los navegadores), recibirá los siguientes mensajes de error:
Please lengthen this text to 2 characters or more (you are currently using 1 character)
utilizando minlength
y
Please match the format requested
utilizando pattern
.
Nueva versión:
Extiende el uso (área de texto y entrada) y corrige errores.
// Author: Carlos Machado
// Version: 0.2
// Year: 2015
window.onload = function() {
function testFunction(evt) {
var items = this.elements;
for (var j = 0; j < items.length; j++) {
if ((items[j].tagName == "INPUT" || items[j].tagName == "TEXTAREA") && items[j].hasAttribute("minlength")) {
if (items[j].value.length < items[j].getAttribute("minlength") && items[j].value != "") {
items[j].setCustomValidity("The minimum number of characters is " + items[j].getAttribute("minlength") + ".");
items[j].focus();
evt.defaultPrevented;
return;
}
else {
items[j].setCustomValidity('');
}
}
}
}
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
var isChrome = !!window.chrome && !isOpera;
if(!isChrome) {
var forms = document.getElementsByTagName("form");
for(var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', testFunction,true);
forms[i].addEventListener('change', testFunction,true);
}
}
}
Noté que, a veces, en Chrome cuando la función de autocompletar está activada y los campos son de campo por el método de compilación del navegador de autocompletar, omite las reglas de validación de longitud mínima, por lo que en este caso tendrá que deshabilitar la función de autocompletar con el siguiente atributo:
autocompletar = "apagado"
<input autocomplete="new-password" name="password" id="password" type="password" placeholder="Password" maxlength="12" minlength="6" required />
Consulte http://caniuse.com/#search=minlength , algunos navegadores pueden no admitir este atributo.
Si el valor del "tipo" es uno de ellos:
texto, correo electrónico, búsqueda, contraseña, teléfono o url (advertencia: no incluir número | no es compatible con el navegador "tel" ahora - 2017.10)
use el atributo minlength (/ maxlength), especifica el número mínimo de caracteres.
p.ej.
<input type="text" minlength="11" maxlength="11" pattern="[0-9]*" placeholder="input your phone number">
o use el atributo "patrón":
<input type="text" pattern="[0-9]{11}" placeholder="input your phone number">
Si el "tipo" es número , aunque no se admite la longitud mínima (/ longitud máxima), puede usar min atributo (/ max) en su lugar.
p.ej.
<input type="number" min="100" max="999" placeholder="input a three-digit number">
Escribí este código JavaScript, [minlength.js]:
window.onload = function() {
function testaFunction(evt) {
var elementos = this.elements;
for (var j = 0; j < elementos.length; j++) {
if (elementos[j].tagName == "TEXTAREA" && elementos[j].hasAttribute("minlength")) {
if (elementos[j].value.length < elementos[j].getAttribute("minlength")) {
alert("The textarea control must be at least " + elementos[j].getAttribute("minlength") + " characters.");
evt.preventDefault();
};
}
}
}
var forms = document.getElementsByTagName("form");
for(var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', testaFunction, true);
}
}
Si desea realizar este comportamiento,
siempre muestre un pequeño prefijo en el campo de entrada o el usuario no puede borrar un prefijo :
//prefix="prefix_text"
//if the user change the prefix, restore the input with the prefix:
if(document.getElementById('myInput').value.substring(0,prefix.length).localeCompare(prefix))
document.getElementById('myInput').value = prefix;
En mi caso, en el que valido más manualmente y usando Firefox (43.0.4), minlength
y validity.tooShort
lamentablemente no están disponibles.
Como solo necesito tener longitudes mínimas almacenadas para continuar, una manera fácil y práctica es asignar este valor a otro atributo válido de la etiqueta de entrada. En ese caso, puede usar min
, max
y step
propiedades de las entradas [type = "number"].
En lugar de almacenar esos límites en una matriz, es más fácil encontrarlo almacenado en la misma entrada en lugar de hacer que la identificación del elemento coincida con el índice de la matriz.
Agregue un valor máximo y uno mínimo, puede especificar el rango de valores permitidos:
<input type="number" min="1" max="999" />