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



정규표현식 예제 (8)

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

[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];
}

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


다음과 같이 사용하십시오.

list($username, $domain) = explode('@', $email . "@"); // ."@" is a trick: look note below

이 솔루션을 사용하면 전자 메일 주소 부분에 이미 두 개의 변수가 한 행에 채워져있을 것입니다.

."@" : 이것은 list 명령으로 짧은 치명적인 오류를 피하고 explode 가 필요에 따라 최소한 두 개의 변수를 생성하도록합니다.


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


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

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

@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 = "[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 ;

<?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


@ 문자에 도달 할 때까지 모든 문자를 일치시키고 캡처하는 정규 표현식 :

([^@]+)

그것은 당신이 필요로하는 것처럼 보입니다. 전자 메일 주소에 모든 종류의 이상한 변형을 처리 할 것입니다.

벤 제임스 가 내 대답을 삭제 한 이유를 잘 모르겠다. 나는 그가 대답을 취소하지 않는 한 여기에 올리겠습니다 :

왜 문자열 함수 대신 정규식을 사용합니까?

$parts = explode("@", "[email protected]");
$username = $parts[0];

이 상황에서는 정규 표현식이 전혀 필요하지 않습니다. 나는 explode 사용하는 것이 개인적으로 더 나은 선택이라고 생각한다.

요하네스 뢰 셀 (Johannes Rössel) 이 의견에서 지적한 것처럼 전자 메일 주소 구문 분석은 다소 복잡합니다. 기술적으로 유효한 전자 메일 주소를 100 % 확실하게 처리하려면 100 % 확실하게 견적을 처리하는 루틴을 작성해야합니다. 내 대답에 나열된 두 가지 해결책이 주소는 " "[email protected]"@example.com 입니다. 이런 종류의 구문 분석을 처리하는 라이브러리가있을 수 있지만 그 라이브러리는 인식하지 못합니다.


나는 preg_replace 사용했다.

$email_username = preg_replace('/@.*/', '', $_POST['email']);




preg-match