Функция регулярного выражения Regex для получения электронной почты не совпадает с заглавными буквами - PullRequest
0 голосов
/ 06 марта 2012

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

string=:'Here is the email address I would like to get out of here Ahmad_khalid@yahoo.com in 1 st try'

Этот следующий синтаксис возвращает адрес электронной почты, но пропускает заглавные буквы и возвращает адрес электронной почты из примерно такой строки, как [hmad_khalid@yahoo.com] пропущен заглавная буква A.

$regex='`([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})`';

Ответы [ 3 ]

1 голос
/ 06 марта 2012

Я не проверял ваше регулярное выражение подробно, но если заглавные символы - единственная проблема, то просто добавьте модификатор i после последнего разделителя регулярных выражений

$regex='`([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})`i';

этот модификатор делает регулярное выражениесовпадение без учета регистра.

ОК, тогда вам следует добавить хотя бы несколько якорей \b к регулярному выражению, чтобы избежать частичных совпадений.

$regex='`\b([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,6})\b`i';

См. здесь здесь, в регулярном выражении

\b соответствует при переходе от символа слова (A-Za-z0-9_) к несловесному символу (все остальные) и наоборот.

Вы должныподумайте об изменении последнего квантификатора с {2,4} на {2,6}, есть редкие домены, длина которых превышает 4 символа.

0 голосов
/ 06 марта 2012

в вашем регулярном выражении, _a-z0-9 не включает заглавные буквы.там, где это происходит, используйте это вместо: \w (метапоследовательность «слово-символ», буквенно-цифровые символы или «буквы, цифры и подчеркивания»): [\w-].(править) Я также почти уверен, что вы можете обойтись без нечетких парных групп (вы сопоставляете весь адрес, не разбирая его с правильными группами совпадений, поэтому они не делают ничего полезного), и получаете несколько более симпатичное регулярное выражение:

$regex = "\b[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.[a-zA-Z]{2,6}\b"; 

против

$regex='`\b([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,6})\b`i';

regexr ссылка здесь (спасибо, классный сайт Stema:])

0 голосов
/ 06 марта 2012

в JavaScript

function extractEmail()
{
    var sentnce="Here is the email address I would like to get out of here w555@yahoo.co.in in 1 st try";
    var regEmail=/^[a-zA-Z0-9]+[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+[\.]{1}[a-zA-Z]{2,4}$/;

var strArray=sentnce.split(' ');



    for(i=0;i<strArray.length;i++)
    {

        if(regEmail.test(strArray[i]))
        {
            alert('email: '+strArray[i]);

        }

    }

}
...