是否有一个好的策略来清理用户输入的表单Gmail地址
[email protected]
[email protected]
是实际地址吗? 即
[email protected]
用例是禁止创建具有不同 gmail 地址但都指向同一个 gmail 收件箱的多个网站帐户。 “标准化”电子邮件将存储在数据库中的单独字段中,以便当任何新用户注册时,我们可以轻松检查标准化新用户电子邮件地址与标准化现有电子邮件。
这是我的想法和代码示例:
.
之前出现的所有点
@
+
以及 @
oogle
这 3 个匹配操作在此正则表达式中进行或运算
/\.+(?=.*@(gmail|googlemail)\.com)|\+.*(?=@(gmail|googlemail)\.com)|(?<=@g)oogle(?=mail\.com)/gi
它适用于下面的测试用例,但还不是很完善。 还有其他更有效的技术吗?
const teststr = `[email protected]
[email protected]
[email protected]
[email protected]`;
const tests = teststr.split("\n");
const re = /\.+(?=.*@(gmail|googlemail)\.com)|\+.*(?=@(gmail|googlemail)\.com)|(?<=@g)oogle(?=mail\.com)/gi;
const results = tests.map(t => t.replace(re, ""));
console.log(results);
更简单的是首先在
@
字符处分割字符串。然后清理第一部分,然后将它们放回原处。
function clean_name(address) {
let [localpart, domain] = address.split('@');
if (domain.match(/^(gmail|googlemail)\.com$/i)) {
localpart = localpart.replace(/\+.*|\./g, '');
}
return localpart + '@' + domain;
}
const teststr = `[email protected]
[email protected]
[email protected]
[email protected]`;
const tests = teststr.split("\n");
const results = tests.map(clean_name);
console.log(results);