【问题标题】:javascript - add spaces after commas and full stops, but not if it is a decimal separator [closed]javascript - 在逗号和句号之后添加空格,但如果它是小数分隔符则不添加[关闭]
【发布时间】:2013-12-06 18:02:38
【问题描述】:

我有一个带有文本字段的表单,用于填写网站用户。用户通常不会在逗号和句号之后放置空格。如何用 javascript 格式化此文本区域,以便在这些逗号和句号字符之后添加空格,但要留下那些表示数字的小数分隔符的字符。我尝试过使用replace(/\,/g,', '),但这也在数字的小数分隔符后放置了空格。

谢谢

【问题讨论】:

  • 无法区分1,200,40 上的 1.2k, 40 和 1, 200, 40。这是不可能的。
  • 但也许看看后面你可以看到逗号左边的字符是否是数字,并且在大多数情况下都可以使用,除非有人写“我的幸运数字是 7,4 5 只猫发出咕噜声”
  • 对我来说没关系,如果可以在 95% 的情况下工作,但我是 javacript 环境的新手,我不知道该怎么做。
  • @ajax333221: javascript 正则表达式引擎不支持lookbehinds。

标签: javascript regex add space


【解决方案1】:

这是使用拆分的非正则表达式解决方案:

function fixString(inp){
    var i, len, arr, outp, Rside, Lside, RsideIsNum, LsideIsNum;

    arr = inp.split(",");
    outp = "";

    for(i=1, len=arr.length; i<len; i++){
        Lside = arr[i-1];
        Rside = arr[i];

        LsideIsNum = /\d/.test(Lside.charAt(Lside.length-1));
        RsideIsNum = /\d/.test(Rside.charAt(0));

        outp += "," + ((LsideIsNum && RsideIsNum)?"":" ") + Rside;
    }

    return (arr[0] + outp).replace(/\s\s+/g," ");
}

然后使用它只需像这样调用fixString(my_string)

var str_old = "a,1b,c,d2,e,3f4,g, this is a test, 1,000 yay!,2,000,ok?";
var str_new = fixString(str_old);

//str_old: a,1b,c,d2,e,3f4,g, this is a test, 1,000 yay!,2,000,ok?
//str_new: a, 1b, c, d2, e, 3f4, g, this is a test, 1,000 yay!, 2,000, ok?

但是,正如我在 cmets 中所说,当有人说 "my lucky number is 7,4 out of 5 cats purr" 时,您会得到意想不到的结果。

【讨论】:

  • 这也删除了换行符/换行符。可以只删除重复的空格吗?谢谢。
  • 我找到了解决方案。我使用 replace(/ {2,}/g, " ");安装你的,现在一切正常。
【解决方案2】:

使用捕获组和负数标识符。

var test = "i believe.1.5.today";
test = test.replace(/([^\d])\.([^\d])/g,'$1. $2').replace(/([\d])\.([^\d])/g,'$1. $2').replace(/([^\d])\.([\d])/g,'$1. $2')
// test == "i believe. 1.5. today"

但是,如果您有 2 个由 2 个数字分隔的句子,例如“... blah 1.2 is the number ...”,则不会插入空格。

您可以扩展逗号的正则表达式或只使用相同的模板。

【讨论】:

  • 我已经尝试过,但对于 Octavia 1.6 FSi 116 ps.Frissen beiratva。给了我 Octavia 1. 6 FSi 116 ps。弗里森贝拉特瓦。所以在小数点后加空格
  • 很抱歉。我想不出用一个正则表达式来做到这一点的方法,但是链接其中的 3 个就可以了。
  • 谢谢,它运行良好。如果有 3 个正则表达式链接有什么缺点?如何将其应用于超过 1 个符号,我的意思是一次性替换句号和感叹号等。感谢您的回复。
  • 你有一些双空格问题jsfiddle.net/2VcKK/3
  • 是的,但只有当有像 . .. . 这样的奇怪输入时,这些才看起来很明显(快速浏览)。这可能在更高级的正则表达式或至少一个忽略目标分隔符周围的非特殊字符(如点和空格)的简单扩展中得到解决。
【解决方案3】:

您需要为正则表达式添加更多上下文——也许像逗号这样的东西必须触及字母?replace(/[a-zA-Z]?,.?/gi, ', ')

【讨论】:

  • 这样可以消除逗号前后的字母
猜你喜欢
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2016-08-04
相关资源
最近更新 更多