Preciso de ajuda para criar uma expressão regular para preg_match
de acordo com estas regras:
- primeira e última letra / dígito apenas.
- espaço vazio não permitido
- char pode ser apenas - letra / dígito / "-" / "_" / "."
Exemplos legais:
- b.t612_rt
- rotina
- rut7565
Exemplo não legal:
- .btr78; btr78- (primeiro / último chars permitidos)
- inicio fim; inicio fim; (qualquer espaço vazio)
- tr $ be; tr * rt; tr / tr ... (não permitidos chars)
Edit: eu remover 4 regra com neigbor chars "_" "-" "."
por favor me ajude.
obrigado
Respostas:
3 para resposta № 1Tente esta expressão regular:
^[A-Za-z0-9]+([-_.][A-Za-z0-9]+)*$
Isto corresponde a qualquer sequência que comece com pelo menos uma letra ou dígito (^[A-Za-z0-9]+
) que pode ser seguido por zero ou mais sequências de um dos -
, _
ou .
([-_.]
) que deve ser seguido de pelo menos uma letra ou um algarismo ([A-Za-z0-9]+
).
2 para resposta № 2
Tente isto:
^[p{L}p{N}][p{L}p{N}_.-]*[p{L}p{N}]$
No PHP:
if (preg_match(
"%^ # start of string
[p{L}p{N}] # letter or digit
[p{L}p{N}_.-]* # any number of letters/digits/-_.
[p{L}p{N}] # letter or digit
$ # end of the string.
%xu",
$subject)) {
# Successful match
} else {
# Match attempt failed
}
Comprimento mínimo da string: dois caracteres.
1 para resposta № 3
Isso parece funcionar bem para os exemplos fornecidos: $patt = "/^[a-zA-Z0-9]+([-._][a-zA-Z0-9]+)*$/";
1 para resposta № 4
Bem, para cada uma das suas regras:
Primeira e última letra / dígito:
^[a-z0-9]
e
[a-z0-9]$
espaço vazio não permitido (nada é necessário, já que estamos fazendo uma correspondência positiva e não permitimos nenhum espaço em branco):
Apenas letras / dígitos / - / _ /.
[a-z0-9_.-]*
Nenhum símbolo vizinho:
(?!.*[_.-][_.-])
Então, todos juntos:
/^[a-z0-9](?!.*[_.-][_.-])[a-z0-9_.-]*[a-z0-9]$/i
Mas com todos os regexes, existem várias soluções, então experimente ...
Edit: para sua edição:
/^[a-z0-9][a-z0-9_.-]*[a-z0-9]$/i
Você acabou de remover a seção da regra que deseja alterar / remoto. É tão fácil...