/ / PHP - Regex: Preciso de ajuda para construir o regex de acordo com essas regras - php, regex

PHP - Regex: Eu preciso de ajuda para construir regex de acordo com essas regras - php, regex

Preciso de ajuda para criar uma expressão regular para preg_match de acordo com estas regras:

  1. primeira e última letra / dígito apenas.
  2. espaço vazio não permitido
  3. char pode ser apenas - letra / dígito / "-" / "_" / "."

Exemplos legais:

  1. b.t612_rt
  2. rotina
  3. rut7565

Exemplo não legal:

  1. .btr78; btr78- (primeiro / último chars permitidos)
  2. inicio fim; inicio fim; (qualquer espaço vazio)
  3. 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 № 1

Tente 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:

  1. Primeira e última letra / dígito:

    ^[a-z0-9]
    

    e

    [a-z0-9]$
    
  2. 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):

  3. Apenas letras / dígitos / - / _ /.

    [a-z0-9_.-]*
    
  4. 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...