【问题标题】:Counting items based on multiple separators?基于多个分隔符计数项目?
【发布时间】:2012-08-28 19:38:40
【问题描述】:

我需要计算用户输入的电子邮件地址的数量。这些地址可以由以下任何一种分隔:

  • 逗号后面没有空格 - a@example.com,c@example.com.com
  • 逗号后跟任意数量的空格(即有人可能在逗号后跟 3 个空格或只有 1 个空格) - a@example.com, c@example.com.com
  • 只有空白 - a@example.com c@example.com.com
  • 新行

有什么好方法可以清理并可靠地计算地址?

我认为常规的 'ole javascript 可以处理这个问题,但我使用 jQuery 是值得的。

【问题讨论】:

  • 这不是字符串包含多少个电子邮件地址...这只是字符串包含多少whitespace|comma。您还可以计算@ 的数量。这也不正确。

标签: javascript jquery regex split


【解决方案1】:

最简单的方法是将所有逗号替换为空格,然后根据空格拆分字符串。不需要条件。

Here's 举个例子。

【讨论】:

    【解决方案2】:
    var emails = input.split(/[\s,]+/);
    

    FIDDLE

    【讨论】:

    • +1 表示贪心模式,在所有空格上拆分会导致数组元素为空,从而导致电子邮件地址计数错误
    • 当然,这就是我的答案。我刚刚添加了对信息贪婪匹配的解释(以防 OP 需要它,以及为什么他不应该选择 /[\s,]/,更不用说 / | ,|,/
    • 因为开头和结尾的空格都算作电子邮件,所以在拆分之前添加这个来修剪字符串:input.replace(/^\s+|\s+$/g,"").split(/[\s,]+/);
    【解决方案3】:
    var str="YOUR_STR",
        arr = [];
    if( str.indexOf(',') >= 0 ) {
       // if comma found then replace all extra space and split with comma
       arr =  str.replace(/\s/g,'').split(',');
    } else {
       // if comma not found
       arr = str.split(' ');
    }
    

    【讨论】:

      【解决方案4】:
      var l = "a@example.com,c@example.com.com a@example.com, c@example.com.com a@example.com c@example.com.com";
      
      var r = l.split(/ |, |,/);
      

      正则表达式使这变得相当容易。

      如果有不止一个空格的变化,正则表达式可以稍微改变一下。

      var r = l.split(/ +|, +|,/);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        • 2011-11-28
        • 2013-10-02
        • 1970-01-01
        相关资源
        最近更新 更多