使用正则表达式将输入格式化为单字符逗号单字符逗号等

时间:2015-04-09 17:18:56

标签: javascript jquery regex

好吧,不可否认,我的正则表达式技巧相当糟糕(我使用正则表达式cheatsheet构建它),并且在大多数情况下,这很有效,但是单个字符会让我感到沮丧。如果我将q w e r t y粘贴到文本框中,我希望返回q,w,e,r,t,y,,但它返回的是q,ue,rt,y

$("#niftyInput").bind('paste', function(e) {
    var str = this.value.replace(/(\w)[\s,]+(\w?)/g, '$1,$2').replace(/[^a-zA-Z0-9-,]/g, '');
    if (str!=this.value) this.value = str;
});

小提琴:http://jsfiddle.net/crunchfactory/435dc37o/

非常感谢!

4 个答案:

答案 0 :(得分:1)

要理解更大的背景有点难,但为什么不是

$("#niftyInput").bind('paste', function(e) {
    var str = this.value.replace(/[\s,]+/g, ',').replace(/[^a-zA-Z0-9-,]/g, '');
    if (str!=this.value) this.value = str;
});

$("#niftyInput").bind('paste', function(e) {
    this.value = this.value.replace(/[\s,]+/g, ',').replace(/[^a-zA-Z0-9-,]/g, '');
});

...但这与正则表达式无关。

答案 1 :(得分:0)

这是你的正则表达式所做的:

(\w)            [\s,]+                             (\w?)
one character   at least one whitespace or comma   one or zero characters

当你的输入框中有q w e r t y之类的内容时,以下是它的捕获方式:

'q'是一个单词字符,与(\w)匹配,因此'q'存储在$1' '是一个空格,匹配[\s,]+,继续进行 'w'是一个单词字符,与(\w?)匹配,因此'w'存储在$2中,匹配结束。

这就是q w e r t y成对返回多个匹配(q,w)(e,r)(t,y)的原因,后者变为q,ue,rt,y

有很多方法可以做你真正想要的事情。由于默认情况下正则表达式是贪婪的并且将匹配尽可能多的字符,因此您可以这样做:

(\w+)[\s,]*

(\w+)将捕获可能最长的单词字符序列 [\s,]*然后会将其后的任何空格和逗号视为“匹配”的一部分,但不会将其视为$1捕获的一部分。

答案 2 :(得分:0)

\s+(?=\w)

[\s,]+(?=\w)

试试这个。,。见。演示。

https://regex101.com/r/sJ9gM7/77

答案 3 :(得分:0)

您可以使用以下代码,替换空格:

$("#niftyInput").bind('paste', function(e) {
    var str = this.value.replace(/\s+/g, ',').replace(/[^a-zA-Z0-9-,]/g, '');
    if (str!=this.value) this.value = str;
});

<强> Working demo