php - 특정 - 전자 메일 주소에서 정규식을 사용하여 사용자 이름 추출




정규표현식 예제 (7)

@OP, @ 앞에 모든 것을 가져 오려면 문자열 / 배열 메소드 만 사용하십시오. 복잡한 정규식이 필요 없습니다. "@"을 분해 한 다음 도메인 부분 인 마지막 요소를 제거하십시오

$str = '"[email protected]@doe"@domain.com (John Doe)';
$s = explode("@",$str);
array_pop($s); #remove last element.
$s = implode("@",$s);
print $s;

산출

$ php test.php
"[email protected]@doe"

내 텍스트 문자열은 다음과 같습니다.

[email protected] (John Doe)

@ 앞 부분 만 가져 가야합니다. 그 텍스트는 단순한 XML 객체에서 온 것입니다.

내가 가지고있는 코드는 다음과 같다.

$authorpre = $key->{"author"};
$re1 = '((?:[a-z][a-z]+))';

if ($c = preg_match_all ("/".$re1."/is", $authorpre, $matches))
{
    $author = $matches[1][0];
}

때로는 사용자 이름에 숫자 나 @ 기호 앞에 밑줄이있을 수 있습니다. 정규식이 멈추는 곳이 여기에 있습니다.


기본 예 :

    $email = "[email protected]";
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        list($user, $domain) = explode('@', trim($email) . "@");
    } else {
        echo "Unable to get account info ....";
    }

복잡한 예 : 이름과 성 필드를 채우는 것과 같은 것 :

1) valid email ?  if yes get the two parts  user and domain.
2) else set to something default etc.
3) use the email address if we don't have a decoded value.

암호:

    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        list($fname, $lname) = explode('@', trim($email) . "@");
    } else {
        $fname = "Xdefault";
        $lname = "Ydefault";
    }

    $fname = (!empty($decoded['firstname'][0]))  ? $decoded['firstname'][0] : $fname ;
    $lname = (!empty($decoded['lastname'][0]))  ? $decoded['lastname'][0] : $lname ;

나는 $author = str_replace(strrchr($authorpre, '@'), '', $authorpre); 와 함께 갈 것이다 $author = str_replace(strrchr($authorpre, '@'), '', $authorpre);


나의 제안:

$email = '[email protected]';
$username = substr($email, 0, strpos($email, '@'));

// Output (in $username): johndoe

어쩌면이 변형은 explode ()보다 약간 느릴 수도 있지만 단 하나의 문자열 만 필요합니다.

$name = preg_replace('/@.*?$/', '', $email);

mailparse_rfc822_parse_addresses 를 사용하여 주소를 구문 분석하고 표시 이름없이 주소 지정 만 추출 할 수 있습니다. 그런 다음 regexp (.*)@ 앞의 부분을 추출 할 수 있습니다.


<?php
$email  = '[email protected]';
$domain = strstr($email, '@');
echo $domain; // prints @example.com

$user = strstr($email, '@', true); // As of PHP 5.3.0
echo $user; // prints name
?>

source







preg-match