This regex can also serve you:
/^[a-z][a-z\d]?$/i
The i
flag will dispense with the use of the .toUpperCase()
method, because it will ignore if the letter is uppercase or lowercase.
Explanation:
[a-z] O primeiro caractere é obrigatório ser uma letra
[a-z\d] O segundo caractere é opcional, mas se existir
deverá ser uma letra [a-z] ou um número \d
The ?
makes [a-z\d]
optional. The ^
and $
delimit the string to a maximum of 2 characters from the first.
Then if
would be:
if(/^[a-z][a-z\d]?$/i.test(value)){
callback(true);
}else{
callback(false);
}
Test:
function valida(i){
if(/^[a-z][a-z\d]?$/i.test(i)){
callback(true, i);
}else{
callback(false, i);
}
}
function callback(x, i){
console.clear();
console.log("'"+ i +"' é "+ x);
}
<p>Clique nos botões</p>
<button onclick="valida('a')">a</button>
<button onclick="valida('A')">A</button>
<button onclick="valida('aB')">aB</button>
<button onclick="valida('a#')">a#</button>
<button onclick="valida('a1')">a1</button>
<button onclick="valida('3A')">3A</button>