" example@something.com" - > "例如" PHP

时间:2014-06-30 14:11:30

标签: php regex

我对正则表达式很新,无法弄清楚它是如何工作的。我试过这个:

function change_email($email){
   return preg_match('/^[\w]$/', $email);
}

但是这只返回一个布尔值true或false,我希望它返回@之前的所有内容。 这可能吗?我甚至不认为我在这里使用正确的PHP函数..

6 个答案:

答案 0 :(得分:6)

使用explode尝试更简单的方法:

explode('@', $email)[0];

答案 1 :(得分:3)

使用strpos获取@字符和substr的位置以裁剪电子邮件:

function change_email($email){
    return substr($email, 0, strpos($email, '@'));
}

示例:

<?php

function change_email($email){
    return substr($email, 0, strpos($email, '@'));
}

var_dump( change_email( 'foo@bar.com' )); // string(3) "foo"
var_dump( change_email( 'example.here@domain.net' )); // string(12) "example.here"
var_dump( change_email( 'not.an.email' )); // string(0) ""

DEMO

答案 2 :(得分:2)

您想要使用的是strstr()函数,您可以阅读here

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

答案 3 :(得分:2)

正则表达式

.*(?=@)

Demo

$re = "/.*(?=@)/"; 
$str = "example@something.com"; 

preg_match($re, $str, $matches);

答案 4 :(得分:2)

preg_match中有第3个参数,用于保存匹配的项目。

例如:

preg_match( '/(?P<email_name>[a-zA-Z0-9._]+)@(?P<email_type>\w+)\.\w{2,4}/', $email, $matches );

If $email = 'hello@gmail.com'
$matches['email_name'] will be equal to "hello"
$mathces['email_type'] will be equal to "gmail"

请注意,电子邮件名称可能只包含字母,数字,下划线和点。如果你想添加一些额外的字符,请在字符类中添加它们 - &gt; [a-zA-Z0-9._其他字符]

答案 5 :(得分:0)

通过正则表达式,

<?php
$mystring = "foo@bar.com";
$regex = '~^([^@]*)~';
if (preg_match($regex, $mystring, $m)) {
    $yourmatch = $m[1]; 
    echo $yourmatch;
    }
?> //=> foo