Parece que o minlength
atributo para um <input>
campo não funciona.
Existe algum outro atributo no HTML5 com a ajuda do qual posso definir o tamanho mínimo de um valor para os campos?
Parece que o minlength
atributo para um <input>
campo não funciona.
Existe algum outro atributo no HTML5 com a ajuda do qual posso definir o tamanho mínimo de um valor para os campos?
Respostas:
Você pode usar o pattern
atributo . O required
atributo também é necessário, caso contrário, um campo de entrada com um valor vazio será excluído da validação de restrição .
<input pattern=".{3,}" required title="3 characters minimum">
<input pattern=".{5,10}" required title="5 to 10 characters">
Se você deseja criar a opção de usar o padrão para "comprimento vazio ou mínimo", faça o seguinte:
<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
, ela continuará mostrando a mensagem de erro, mesmo após a correção. Você pode usar o seguinte onchange
método para combater isso. oninvalid="this.setCustomValidity('Field must contain min. 5 characters')" onchange="try{setCustomValidity('')}catch(e){}"
Agora há uma minlength
propriedade na especificação HTML5 , bem como na validity.tooShort
interface.
Agora, ambos estão ativados nas versões recentes de todos os navegadores modernos. Para detalhes, consulte https://caniuse.com/#search=minlength .
minlength
atributos desde a versão 51 .
Aqui está a solução somente para HTML5 (se você deseja validação de minlength 5 e maxlength 10 caracteres)
http://jsfiddle.net/xhqsB/102/
<form>
<input pattern=".{5,10}">
<input type="submit" value="Check"></input>
</form>
title
atributo com a mensagem necessária.
pattern
resposta foi dada alguns meses antes . Como esta resposta é melhor?
Sim está aí. É como comprimento máximo. Documentação do W3.org: http://www.w3.org/TR/html5/forms.html#attr-fe-minlength
Caso minlength
isso não funcione, use o pattern
atributo mencionado por @ Pumbaa80 para a input
tag.
Para área de texto:
Para definir max; use maxlength
e por min vá para este link .
Você encontrará aqui para max e min.
Usei maxlength e minlength com ou sem required
e funcionou muito bem para HTML5.
<input id="passcode" type="password" minlength="8" maxlength="10">
`
O atributo minLength (diferente do maxLength) não existe nativamente no HTML5. No entanto, existem algumas maneiras de validar um campo se ele contiver menos de x caracteres.
Um exemplo é dado usando jQuery neste link: 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>
Não é HTML5, mas é prático de qualquer maneira: se você usa o AngularJS , pode usar ng-minlength
para entradas e áreas de texto. Veja também este Plunk .
data-ng-minlength
mas por que um desenvolvedor se importaria com os padrões? > __>
data-ng-minlength
também .
Minha solução para a área de texto usando jQuery e combinando a validação HTML5 exigia a verificação do tamanho mínimo.
$(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
O atributo agora é amplamente suportado na maioria dos navegadores .
<input type="text" minlength="2" required>
Mas, como em outros recursos do HTML5, o IE11 está ausente nesse panorama. Portanto, se você possui uma ampla base de usuários do IE11, considere o uso do pattern
atributo HTML5, que é suportado praticamente na maioria dos navegadores (incluindo o IE11).
Para ter uma implementação agradável e uniforme e talvez extensível ou dinâmica (com base na estrutura que gera seu HTML), eu votaria no pattern
atributo:
<input type="text" pattern=".{2,}" required>
Ainda há uma pequena captura de usabilidade ao usar pattern
. O usuário verá uma mensagem de erro / aviso não intuitiva (muito genérica) ao usar pattern
. Veja este jsfiddle ou abaixo:
<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 exemplo, no Chrome (mas semelhante na maioria dos navegadores), você receberá as seguintes mensagens de erro:
Please lengthen this text to 2 characters or more (you are currently using 1 character)
usando minlength
e
Please match the format requested
usando pattern
.
Nova versão:
Ele estende o uso (área de texto e entrada) e corrige bugs.
// 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);
}
}
}
Percebo que algumas vezes no chrome quando o preenchimento automático está ativado e os campos são preenchidos pelo método de compilação do navegador de preenchimento automático, ele ignora as regras de validação de minlength; portanto, nesse caso, você precisará desativar o preenchimento automático pelo seguinte atributo:
autocomplete = "off"
<input autocomplete="new-password" name="password" id="password" type="password" placeholder="Password" maxlength="12" minlength="6" required />
Consulte http://caniuse.com/#search=minlength , alguns navegadores podem não suportar esse atributo.
Se o valor do "tipo" for um deles:
texto, email, pesquisa, senha, tel ou url (aviso: não incluir número | nenhum suporte ao navegador "tel" agora - 2017.10)
use o atributo minlength (/ maxlength), especifica o número mínimo de caracteres.
por exemplo.
<input type="text" minlength="11" maxlength="11" pattern="[0-9]*" placeholder="input your phone number">
ou use o atributo "padrão":
<input type="text" pattern="[0-9]{11}" placeholder="input your phone number">
Se o "tipo" for número , não há suporte para o tamanho mínimo (/ maxlength), mas você poderá usar o atributo min (/ max).
por exemplo.
<input type="number" min="100" max="999" placeholder="input a three-digit number">
Eu escrevi 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);
}
}
Se você deseja fazer esse comportamento,
sempre mostre um pequeno prefixo no campo de entrada ou o usuário não pode apagar um prefixo :
//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;
No meu caso, no qual eu valido mais manualmente e usando o Firefox (43.0.4), minlength
e validity.tooShort
infelizmente não estou disponível.
Como eu só preciso ter comprimentos mínimos armazenados para prosseguir, uma maneira fácil e prática é atribuir esse valor a outro atributo válido da tag de entrada. Nesse caso, então, você pode usar min
, max
e step
propriedades de [type = "number"] entradas.
Em vez de armazenar esses limites em uma matriz, é mais fácil encontrá-lo armazenado na mesma entrada, em vez de fazer com que o ID do elemento corresponda ao índice da matriz.
Adicione um valor máximo e um mínimo, você pode especificar o intervalo de valores permitidos:
<input type="number" min="1" max="999" />