屏蔽电子邮件正则表达式
Mask email regexp
我正在尝试使用 php 正则表达式来屏蔽电子邮件,以便
example@gmail.com
转e*****e@gmail.com
.
$maskedEmail=preg_replace('/^*@/', '*', $email);
您可以使用
preg_replace('~((?!^)\G|^[^@])[^@](?=[^@]+@)~', '*', $s)
详情
((?!^)\G|^[^@])
- 第 1 组:上一个匹配项的结尾或字符串的开头以及 @
以外的任何字符
[^@]
- @
以外的字符
(?=[^@]+@)
- 需要 1 个以上字符的正面前瞻(+
在这里很重要,你不能使用 *
),除了 @
之后a @
紧靠当前位置的右侧。
替换为第 1 组中捕获的值(以便第一个字符保留在字符串中,然后除 @
之前的最后一个字符以外的所有字符都替换为 *
。
为了不屏蔽第一个字符,您可以断言直接在左边的不是字符串的开头。
为了不直接屏蔽 @ 之前的字符,您可以在匹配之前断言右边的始终是一个不是 @ 的字符。
(?<!^).(?=[^@]+@)
在替换使用中:
*
说明
(?<!^)
负后向,断言直接在左边的不是字符串的开头
.
匹配除换行符外的任何字符
(?=
正向前瞻,断言直接在右边的是
[^@]+@
使用 negated character class 匹配 1+ 次除 @
之外的任何字符,并匹配 @
)
关闭正面前瞻
例如
$email = "example@gmail.com";
$maskedEmail=preg_replace('/(?<!^).(?=[^@]+@)/', '*', $email);
echo $maskedEmail;
结果
e*****e@gmail.com
我正在尝试使用 php 正则表达式来屏蔽电子邮件,以便
example@gmail.com
转e*****e@gmail.com
.
$maskedEmail=preg_replace('/^*@/', '*', $email);
您可以使用
preg_replace('~((?!^)\G|^[^@])[^@](?=[^@]+@)~', '*', $s)
详情
((?!^)\G|^[^@])
- 第 1 组:上一个匹配项的结尾或字符串的开头以及@
以外的任何字符
[^@]
-@
以外的字符
(?=[^@]+@)
- 需要 1 个以上字符的正面前瞻(+
在这里很重要,你不能使用*
),除了@
之后a@
紧靠当前位置的右侧。
替换为第 1 组中捕获的值(以便第一个字符保留在字符串中,然后除 @
之前的最后一个字符以外的所有字符都替换为 *
。
为了不屏蔽第一个字符,您可以断言直接在左边的不是字符串的开头。
为了不直接屏蔽 @ 之前的字符,您可以在匹配之前断言右边的始终是一个不是 @ 的字符。
(?<!^).(?=[^@]+@)
在替换使用中:
*
说明
(?<!^)
负后向,断言直接在左边的不是字符串的开头.
匹配除换行符外的任何字符(?=
正向前瞻,断言直接在右边的是[^@]+@
使用 negated character class 匹配 1+ 次除@
之外的任何字符,并匹配@
)
关闭正面前瞻
例如
$email = "example@gmail.com";
$maskedEmail=preg_replace('/(?<!^).(?=[^@]+@)/', '*', $email);
echo $maskedEmail;
结果
e*****e@gmail.com