Understanding:
Start with a letter: a-z
;
It should start with a letter of a
to z
lowercase. OK!
Contain only letters, number and characters ,
, .
, -
and _
;
As it does not provide a minimum number of characters after the first character that is required ("Must start with a letter..."), it is considered (as I understood) that from the second character onwards it is optional; but if it is, it must meet the above criteria.
Soon:
Within the criteria set out in the question, you could use this expression:
^[a-z][a-z\d_,\-.]*$
Explanation:
^ Delimita o início da string.
[a-z] O primeiro caractere deve ser de "a" a "z" (minúsculas).
[a-z\d_,\-.] Segundo caractere em diante.
A partir do segundo caractere, pode ou não ter:
[a-z] letras de "a" a "z" (minúsculas)
\d números
_ underline
, vírgula
\- hífen (escapado)
. ponto
* Quantificador que irá encontrar nada ou quantas ocorrências tiver
a partir do segundo caractere.
$ Delimita o fim da string.
Example using a function:
<?php
function checa($str){
return preg_match('/^[a-z][a-z\d_,\-.]*$/', $str);
}
// 0 = false, 1 = true
echo checa("a"); // 1
echo checa("1"); // 0
echo checa("h1-11,11,"); // 1
echo checa("Aa"); // 0
echo checa("1abc_"); // 0
echo checa("aaaaaaaa"); // 1
echo checa("a-----,"); // 1
echo checa("a-12,_#,"); // 0
echo checa(""); // 0
?>
To check, you can use a if
:
<?php
if(checa("a")){
// com o valor "a" irá entrar aqui.
// significa que a string começa com uma letra minúscula
// e atende ao critério da regex
echo "passou";
}else{
echo "não passou";
}
?>
Remembering that capital letters and accents will be considered
invalid.
If you should start with a letter, why put
[0-9]{1,}
at first?– Woss