我正在尝试匹配包含数字和用连字符连接的数字的字符串,例如纵横填字游戏答案规范,例如1,2-2
或1-1,3,4,2-2
/,?(([1-9]-[1-9])|([1-9]))/g
是我用来匹配字符串的东西
value = value.replace(/,?(([1-9]-[1-9])|([1-9]))/g, '');
替换了ok,我已经在一个在线测试器中检查过了。
我真正需要的是否定这一点,这样我就可以在keyup事件上使用它,检查文本区域的内容并删除不适合的字符,所以它只允许通过字符,如示例中所示。
我已经在期望的地方尝试了^
,但是它没有做我期望的事情,我应该如何否定正则表达式,这样我就删除了所有不匹配的东西?
如果有更好的方法做这件事,我也乐于接受建议。
发布于 2011-10-29 16:26:43
var value = 'hello,1,2,3,4-6,1-1,3,test,4,2-2';
var pattern = /,?(([1-9]-[1-9])|([1-9]))/g;
value.replace(pattern, ''); // "hello,test"
您可以使用String#match。使用/g
标志,它返回一个包含所有匹配项的数组,然后您可以使用Array#join将它们连接起来。
问题是,当没有匹配时,String#match返回null,所以您必须处理这种情况并使用空数组,以便它可以联接:
(value.match(pattern) || []).join(''); // ",1,2,3,4-6,1-1,3,4,2-2"
注意:在onblur
上检查它们可能比在onkeyup
上检查它们更好。弄乱用户当前正在输入的文本会让人讨厌。最好是等待用户完成键入。
发布于 2011-10-29 16:27:38
我没有在JS中测试它,但它应该返回从左边开始的有效字符串,并且只要遇到有效的值(注意,我使用了\d
-如果您只想要1-9,则使用括号)。
(?:\d(?:-\d)?,)*\d(?:-\d)?
例如,将此正则表达式与字符串"0-1,1,2,3,4-4,2,,1,3--4"
进行匹配,将返回"0-1,1,2,3,4-4,2"
作为第一个匹配。
https://stackoverflow.com/questions/7937742
复制相似问题