Sembra che l' minlength
attributo per un <input>
campo non funzioni.
C'è qualche altro attributo in HTML5 con l'aiuto del quale posso impostare la lunghezza minima di un valore per i campi?
Sembra che l' minlength
attributo per un <input>
campo non funzioni.
C'è qualche altro attributo in HTML5 con l'aiuto del quale posso impostare la lunghezza minima di un valore per i campi?
Risposte:
Puoi usare l' pattern
attributo . È necessario anche l' required
attributo , altrimenti un campo di input con un valore vuoto verrà escluso dalla convalida del vincolo .
<input pattern=".{3,}" required title="3 characters minimum">
<input pattern=".{5,10}" required title="5 to 10 characters">
Se si desidera creare l'opzione per utilizzare il modello per "lunghezza vuota o minima", è possibile effettuare le seguenti operazioni:
<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
, continuerà a mostrarti il messaggio di errore anche dopo aver corretto l'input. È possibile utilizzare il seguente onchange
metodo per contrastare questo. oninvalid="this.setCustomValidity('Field must contain min. 5 characters')" onchange="try{setCustomValidity('')}catch(e){}"
V'è un minlength
immobile in HTML5 spec ora, così come l' validity.tooShort
interfaccia.
Entrambi sono ora abilitati nelle versioni recenti di tutti i browser moderni. Per i dettagli, consultare https://caniuse.com/#search=minlength .
minlength
attributo dalla versione 51 .
Ecco una soluzione solo per HTML5 (se vuoi la convalida minlength 5, maxlength 10 caratteri)
http://jsfiddle.net/xhqsB/102/
<form>
<input pattern=".{5,10}">
<input type="submit" value="Check"></input>
</form>
title
attributo con il messaggio richiesto.
pattern
risposta è stata data alcuni mesi prima . In che modo è migliore questa risposta?
Sì, eccolo. È come massima lunghezza. Documentazione di W3.org: http://www.w3.org/TR/html5/forms.html#attr-fe-minlength
Nel caso in cui minlength
non funzioni, utilizza l' pattern
attributo come indicato da @ Pumbaa80 per il input
tag.
Per textarea:
per impostare max; usa maxlength
e per min vai a questo link .
Troverai qui sia per max che per min.
Ho usato maxlength e minlength con o senza required
e ha funzionato molto bene per me in HTML5.
<input id="passcode" type="password" minlength="8" maxlength="10">
`
L'attributo minLength (a differenza di maxLength) non esiste nativamente in HTML5. Tuttavia, esistono alcuni modi per convalidare un campo se contiene meno di x caratteri.
Un esempio viene fornito utilizzando jQuery a questo 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>
Non HTML5, ma pratico in ogni caso: se ti capita di usare AngularJS , puoi usarlo ng-minlength
sia per input che per textareas. Vedi anche questo plunk .
data-ng-minlength
ma perché uno sviluppatore dovrebbe preoccuparsi degli standard? > __>
data-ng-minlength
pure .
La mia soluzione per textarea utilizzando jQuery e combinando HTML5 ha richiesto la convalida per verificare la lunghezza minima.
$(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
L'attributo è ora ampiamente supportato nella maggior parte dei browser .
<input type="text" minlength="2" required>
Ma, come con altre funzionalità HTML5, IE11 non è presente in questo panorama. Quindi, se disponi di una vasta base di utenti IE11, prendi in considerazione l'utilizzo pattern
dell'attributo HTML5 che è supportato quasi su tutta la linea nella maggior parte dei browser (incluso IE11).
Per avere un'implementazione gradevole e uniforme e forse estensibile o dinamica (basata sul framework che genera il tuo HTML), voterei per l' pattern
attributo:
<input type="text" pattern=".{2,}" required>
C'è ancora una piccola cattura di usabilità durante l'utilizzo pattern
. L'utente visualizzerà un messaggio di errore / avviso non intuitivo (molto generico) durante l'utilizzo pattern
. Vedi questo jsfiddle o sotto:
<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>
Ad esempio, in Chrome (ma simile nella maggior parte dei browser), otterrai i seguenti messaggi di errore:
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
.
Nuova versione:
Estende l'uso (textarea e input) e corregge i bug.
// 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);
}
}
}
Ho notato che a volte in Chrome quando il riempimento automatico è attivo e i campi sono in campo con il metodo di compilazione del browser di riempimento automatico, ignora le regole di convalida di lunghezza minima, quindi in questo caso dovrai disabilitare il riempimento automatico con il seguente attributo:
autocomplete = "off"
<input autocomplete="new-password" name="password" id="password" type="password" placeholder="Password" maxlength="12" minlength="6" required />
Vedi http://caniuse.com/#search=minlength , alcuni browser potrebbero non supportare questo attributo.
Se il valore del "tipo" è uno di questi:
SMS, e-mail, ricerca, password, tel o url (avviso: non includere il numero | nessun supporto per il browser "tel" ora - 2017.10)
usa l' attributo minlength (/ maxlength), specifica il numero minimo di caratteri.
per esempio.
<input type="text" minlength="11" maxlength="11" pattern="[0-9]*" placeholder="input your phone number">
o usa l'attributo "modello":
<input type="text" pattern="[0-9]{11}" placeholder="input your phone number">
Se il "tipo" è un numero , l'althougth minlength (/ maxlength) non è supportato, è possibile utilizzare min invece l'attributo (/ max).
per esempio.
<input type="number" min="100" max="999" placeholder="input a three-digit number">
Ho scritto questo codice 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 desideri adottare questo comportamento, mostra
sempre un piccolo prefisso nel campo di input o l'utente non può cancellare un prefisso :
//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;
Nel mio caso, in cui convalido il più manualmente e utilizzando Firefox (43.0.4), minlength
e validity.tooShort
purtroppo non sono disponibili.
Dal momento che ho solo bisogno di avere lunghezze minime memorizzate per procedere, un modo semplice e pratico è quello di assegnare questo valore a un altro attributo valido del tag di input. In tal caso, quindi, è possibile utilizzare min
, max
e le step
proprietà dagli input [type = "number"].
Piuttosto che archiviare tali limiti in un array, è più facile trovarlo memorizzato nello stesso input invece di far corrispondere l'id dell'elemento all'indice dell'array.
Aggiungi un valore massimo e uno minimo per specificare l'intervallo di valori consentiti:
<input type="number" min="1" max="999" />