Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重新格式化电子邮件地址。将名字和姓氏大写。删除域。有更好的办法吗?_Javascript_Google Apps Script_Google Sheets_Google Docs - Fatal编程技术网

Javascript 重新格式化电子邮件地址。将名字和姓氏大写。删除域。有更好的办法吗?

Javascript 重新格式化电子邮件地址。将名字和姓氏大写。删除域。有更好的办法吗?,javascript,google-apps-script,google-sheets,google-docs,Javascript,Google Apps Script,Google Sheets,Google Docs,只是在编写脚本以生成报告。 数据是通过谷歌表单提交的表单。电子邮件和其他数据都是以表格形式收集的 所有电子邮件地址也是结构化的。 名字。Lastname@email-domain.co.uk 对于这份报告,我想输入人们的名字,而不是电子邮件 这是我提出的,它确实有效,但我对谷歌的Javascript和脚本还不熟悉。所以我想试着把事情做对,或者找出我哪里做错了。我不想写太多的脚本,然后把它们放在一起,发现它们需要太长的时间和太多的数据,然后失败 var cleanName = names[i].

只是在编写脚本以生成报告。 数据是通过谷歌表单提交的表单。电子邮件和其他数据都是以表格形式收集的

所有电子邮件地址也是结构化的。 名字。Lastname@email-domain.co.uk

对于这份报告,我想输入人们的名字,而不是电子邮件

这是我提出的,它确实有效,但我对谷歌的Javascript和脚本还不熟悉。所以我想试着把事情做对,或者找出我哪里做错了。我不想写太多的脚本,然后把它们放在一起,发现它们需要太长的时间和太多的数据,然后失败

 var cleanName = names[i].replace("@email-domain.co.uk","");
  var cleanName = cleanName.replace("."," ");
  var cleanName = cleanName.charAt(0).toUpperCase() + cleanName.slice(1);
  var space = cleanName.search(" ");
  var cleanName = cleanName.substr(0,space+1)+ cleanName.charAt(space+1).toUpperCase() + cleanName.slice(space+2);
我试了大约一个小时让它在没有空间变量的情况下工作,但就是做不到。
并不是说这是最好的方法。

更新答案

我刚刚意识到,您可以通过使用数组的
.join
方法将其进一步精简:

var namePieces = names[i].replace(/@.+$/, "").split(".");

for (i=0; i<namePieces.length; i++) {
    namePieces[i] = namePieces[i].replace(/^[a-z]/, function(match) {
        return match.toUpperCase();
    });
}

var cleanName = namePieces.join(" ");
实际上,这只需将
名称片段
数组中每个元素的第一个字母转换为大写,然后
将所有更新的元素连接在一起,并用空格分隔每个元素


原始答案

这里有另一种方法。根据您的代码,您可以执行以下操作:

var namePieces = names[i].replace(/@.+$/, "").split(".");
var cleanName = "";

for (i=0; i<namePieces.length; i++) {
    cleanName += (i > 0) ? " " : "";
    cleanName += namePieces[i].replace(/^[a-z]/, function(match) {
        return match.toUpperCase();
    });
}
每次点击
时,它会获取当前电子邮件地址,去掉
@
后面的所有内容,并将剩余值拆分为一个数组

示例数据的结果
Firstname。Lastname@email-domain.co.uk将是以下数组:
[“Firstname”,“Lastname”]

然后,它遍历数组中的每个项目,并在现有的
cleanName
值中添加一个空格,如果它不是
namepiets
数组中的第一个元素:

cleanName += (i > 0) ? " " : "";
然后,它采用当前名称“piece”,如果它的第一个字符是小写字母,则将其替换为其本身的大写版本,并将其添加到当前的
cleanName
值:

cleanName += namePieces[i].replace(/^[a-z]/, function(match) {
    return match.toUpperCase();
});
关于此方法,需要注意两件事:

  • 如果不是小写字母,它会跳过替换,以获得一点额外的速度。如果需要考虑非字母字符(其他语言、符号、数字),则必须更改此正则表达式以接受任何字符(即,
    /^./
    )或更改正则表达式中可接受的字符集
  • 这种方法还可以识别电子邮件地址中名称的其他变体。例如:

    Firstname.M。Lastname@email-domain.co.uk
    将导致
    Firstname M Lastname
    Firstname.Lastname。Jr@email-domain.co.uk
    将导致
    Firstname Lastname Jr

    因此,这可能会增加一点额外的灵活性


  • 感谢您的回复和对代码的简明解释。这是使用regexp吗?如果是这样的话,我还没有研究过,我已经研究过了,但它确实让我困惑,+同时还有其他需要学习的东西。电子邮件地址总是统一的,小写,名字。姓氏@off现在试试你的建议。非常感谢。是的,它使用非常基本的RegExp。第一个是
    /@.+$/
    ,意思是“查找
    @
    的第一个匹配项以及它与字符串结尾之间的所有其他字符(其中必须至少有1个)”。第二个是
    /^[a-z]/
    ,意思是“从字符串开头开始,如果是小写字母,则匹配第一个字符”。至于电子邮件格式,它将处理您的标准。只需指出,它还将处理其他一些变化,如果它们碰巧出现的话。:)再次感谢:)我会试一试再给你回复。所以我试着在所有3个版本上做一个很好的对比测试。这是我到目前为止所拥有的。V1-我的[14-02-05 22:31:01:327 GMT]开始清理名称-[14-02-05 22:31:12:558 GMT]完成清理名称[14-02-05 22:31:38:269 GMT]执行成功[28.51秒总运行时间]V2 talemyn 1.0[14-02-05 22:39:23:723 GMT]开始清理名称-[14-02-05 22:39:25:175 GMT]完成清理名称[14-02-05 22:50:966]执行成功[3.359秒总运行时间]V3 talemyn 2.0持续超过执行时间,且未完成
    cleanName += (i > 0) ? " " : "";
    
    cleanName += namePieces[i].replace(/^[a-z]/, function(match) {
        return match.toUpperCase();
    });