审查电子邮件的最佳正则表达式是什么?
What will be the best regex Expression for censoring email?
您好,我遇到了以特定格式审查电子邮件的问题,但我不知道该怎么做,请帮助我!
电子邮件:exampleEmail@example.com
必填:e***********@e******.com
帮我在 javascript 中得到这个,
我用来审查的当前代码:
const email = exampleEmail@example.com;
const regex = /(?<!^).(?!$)/g;
const censoredEmail = email.replace(regex, '*');
输出:e**********************m
请帮我获取e***********@e******.com
您可以使用
const email = 'exampleEmail@example.com';
const regex = /(^.|@[^@](?=[^@]*$)|\.[^.]+$)|./g;
const censoredEmail = email.replace(regex, (x, y) => y || '*');
console.log(censoredEmail );
// => e***********@e******.com
详情:
(
- 第 1 组开始:
^.|
- 字符串的开头和任何一个字符,或
@[^@](?=[^@]*$)|
- @
和除 @
之外的任何一个字符,后跟除 @
以外的任何字符,直到字符串结尾,或
\.[^.]+$
- 一个 .
然后除 .
之外的任何一个或多个字符,直到字符串结尾
)
- 组结束
|
- 或
.
- 任何一个字符。
(x, y) => y || '*'
替换意味着如果比赛匹配(参加比赛)或 *
.
,则比赛将被替换为第 1 组的值
如果字符串中应该有一个@,您可以捕获字符串的所有部分并对特定组进行替换。
^
字符串开头
([^\s@])
捕获除空白字符或 @ 之外的第一个字符,该字符不应被修改
([^\s@]*)
捕获相同的可选重复项
@
字面匹配
([^\s@])
捕获除空白字符以外的第一个字符或在其后应未修改的@
([^\s@]*)
捕获相同的可选重复项
(\.[^\s.@]+)
捕获一个点和除点、@ 或空白字符之外的 1 个以上应该未修改的字符
$
字符串结束
在替换中使用所有 5 个捕获组,其中将第 2 组和第 4 组替换为 *
。
const regex = /^([^\s@])([^\s@]*)@([^\s@])([^\s@]*)(\.[^\s.@]+)$/;
[
"exampleEmail@example.com",
"test"
].forEach(email =>
console.log(
email.replace(regex, (_, g1, g2, g3, g4, g5) =>
`${g1}${"*".repeat(g2.length)}@${g3}${"*".repeat(g4.length)}${g5}`)
)
);
您好,我遇到了以特定格式审查电子邮件的问题,但我不知道该怎么做,请帮助我!
电子邮件:exampleEmail@example.com
必填:e***********@e******.com
帮我在 javascript 中得到这个, 我用来审查的当前代码:
const email = exampleEmail@example.com;
const regex = /(?<!^).(?!$)/g;
const censoredEmail = email.replace(regex, '*');
输出:e**********************m
请帮我获取e***********@e******.com
您可以使用
const email = 'exampleEmail@example.com';
const regex = /(^.|@[^@](?=[^@]*$)|\.[^.]+$)|./g;
const censoredEmail = email.replace(regex, (x, y) => y || '*');
console.log(censoredEmail );
// => e***********@e******.com
详情:
(
- 第 1 组开始:^.|
- 字符串的开头和任何一个字符,或@[^@](?=[^@]*$)|
-@
和除@
之外的任何一个字符,后跟除@
以外的任何字符,直到字符串结尾,或\.[^.]+$
- 一个.
然后除.
之外的任何一个或多个字符,直到字符串结尾
)
- 组结束|
- 或.
- 任何一个字符。
(x, y) => y || '*'
替换意味着如果比赛匹配(参加比赛)或 *
.
如果字符串中应该有一个@,您可以捕获字符串的所有部分并对特定组进行替换。
^
字符串开头([^\s@])
捕获除空白字符或 @ 之外的第一个字符,该字符不应被修改([^\s@]*)
捕获相同的可选重复项@
字面匹配([^\s@])
捕获除空白字符以外的第一个字符或在其后应未修改的@([^\s@]*)
捕获相同的可选重复项(\.[^\s.@]+)
捕获一个点和除点、@ 或空白字符之外的 1 个以上应该未修改的字符$
字符串结束
在替换中使用所有 5 个捕获组,其中将第 2 组和第 4 组替换为 *
。
const regex = /^([^\s@])([^\s@]*)@([^\s@])([^\s@]*)(\.[^\s.@]+)$/;
[
"exampleEmail@example.com",
"test"
].forEach(email =>
console.log(
email.replace(regex, (_, g1, g2, g3, g4, g5) =>
`${g1}${"*".repeat(g2.length)}@${g3}${"*".repeat(g4.length)}${g5}`)
)
);