PHP preg_replace () шаблон, строчная дезинфекция

У меня есть шаблон электронной почты регулярного выражения и хотелось бы удалить все строки, кроме шаблонов, из строки, в коротком я хочу, чтобы очистить строку …

Я не гуру регулярных выражений, и что мне не хватает в регулярном выражении?

<?php $pattern = "/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[az])\.)+[az]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i"; $email = 'contact<>@domain.com'; // wrong email $sanitized_email = preg_replace($pattern, NULL, $email); echo $sanitized_email; // Should be contact@domain.com ?> 

Шаблон, взятый из: http://fightingforalostcause.net/misc/2006/compare-email-regex.php (самый первый …)

Вы не можете фильтровать и сопоставлять одновременно. Вам нужно разбить его на класс символов для удаления недопустимых символов и соответствующего регулярного выражения, которое проверяет действительный адрес.

 $email = preg_replace($filter, "", $email); if (preg_match($verify, $email)) { // ok, sanitized return $email; } 

В первом случае вы хотите использовать отрицательный класс символов /[^allowedchars]/ .
Во второй части вы используете структуру /^...@...$/ .

Взгляните на расширение фильтра PHP. Он использует const unsigned char allowed_list[] = LOWALPHA HIALPHA DIGIT "!#$%&'*+-=?^_\ {|} ~ @. []"; `Для чистки.

И есть монстр для проверки: строка 525 в http://gcov.php.net/PHP_5_3/lcov_html/filter/logical_filters.c.gcov.php – но проверьте http://www.regular-expressions.info/ email.html для более распространенного и более короткого варианта.

Я думаю, что функция filter_var php также может выполнять эту функцию и более чистым способом. Посмотрите: http://www.php.net/manual/en/function.filter-var.php

пример:

  $email = "chris@exam\\ple.com"; $cleanEmail = filter_var($email, FILTER_SANITIZE_EMAIL); // chris@example.com