Validação de string complexa PHP muito rigorosa usando preg_match

Estou tentando validar uma string contra a seguinte expressão regular que me foi imposta:

[-,.:; 0-9A-Z&@$£¥€'"«»''“”?!/\\()\[\]{}]{3}[-,.:; 0-9A-Z&@$£¥€'"«»''“”?!/\\()\[\]{}*=#%+]{0,157} 

Alguém pode ajudar a escrever um preg_match em PHP para validar uma string de input contra isso? Estou lutando porque:

  1. meu conhecimento da regex não é tão bom em primeiro lugar
  2. Eu vejo personagens especiais no próprio regex, que tenho certeza de que o PHP não ficará feliz com a inserção diretamente em uma string (por exemplo, $ £ ¥ €)

Em vão, espero ter tentado apenas colar-se em preg_match , escapando as citações dobradas, assim:

 $ste = "Some string input"; if(preg_match("/[-,.:; 0-9A-Z&@$£¥€'\"«»''“”?!/\\()\[\]{}]{3}[-,.:; 0-9A-Z&@$£¥€'\"«»''“”?!/\\()\[\]{}*=#%+]{0,157}/",$ste)) { echo "OK"; } else { echo "Not OK"; } 

Desde já, obrigado!!

   

O PHP ficará perfeitamente feliz com os caracteres “especiais” na expressão, desde que você faça o seguinte:

  1. Verifique se a string de input está codificada com a codificação UTF-8.

  2. Certifique-se de que seu arquivo de programa PHP seja salvo usando a codificação UFT-8. (e, obviamente, você precisará usar a codificação UTF-8 em todas as outras partes do seu sistema também, ou você terá caracteres borked aparecendo em algum lugar ao longo da linha, mas isso está fora do escopo desta questão)

  3. Adicione o modificador u ao final da seqüência de padrões regex para informar o analisador regex para lidar com caracteres UTF-8. ou seja:

     preg_match("/....../u", ...); ^ add this 

Além disso, você já está bem localizado.

Você pode fazer isso:

 if (preg_match('~^[ -"$&-),-<>?-\]{}£¥€«»''“”]{3}[ -\]{}£¥€«»''“”]{0,157}$~u', $ste)) echo 'OK'; else echo 'Not OK'; 

Eu adicionei o modificador “u” para o Unicode e reduzi o tamanho das classs de caracteres usando intervalos (exemplo:, ,-< significa todos os caracteres entre e < na tabela unicode) .

Mas o mais importante, eu adicionei âncoras ^ e $ isso significa, respectivamente, começar e terminar a corda.