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:
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:
Verifique se a string de input está codificada com a codificação UTF-8.
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)
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.