否定字符没有按预期工作? ^

Posted

技术标签:

【中文标题】否定字符没有按预期工作? ^【英文标题】:Negated character not working as expected ? ^ 【发布时间】:2012-02-06 20:53:00 【问题描述】:

我想让我的用户输入电话号码并选择他们自己的号码分隔方式(或不)。所以我想出了一个正则表达式:

var regex = /[^0-9 \/-\\\(\)\+]/;

在大多数情况下,它可以正常工作,但也有一些示例,例如 @:;,但它并没有像我预期的那样工作。有人可以给我一些提示吗?

这是我的意思的example

testvar = '123@213';
var regex = /[^0-9 \/-\\\(\)\+]/;
if(regex.test(testvar) === true) 
     alert('Chars out of regex-range found');  // won't fire!

【问题讨论】:

您是说希望他们选择如何使用-+() 的任意组合来分隔它?所以字符串应该只包含 0-9、+/- 和 ()? 换句话说:除指定字符外的任何字符都应被禁止:/-` ()`+ 都可以! 我在这里编辑了你的示例:jsfiddle.net/FYtSy/1这就是你要找的吗? 【参考方案1】:

/\ 有很长的路要走。如果没有,您在破折号前缺少一个斜线:

var regex = /[^0-9 \/\-\\\(\)\+]/;

【讨论】:

确实我忘记转义-。谢谢你,就是找不到。【参考方案2】:

电话号码只使用数字,我会忽略用户格式,只保留数字

var phonenum=value.replace(/\D+/g,'');

【讨论】:

来自外国的用户可能会在其前面输入带有+ 的国家/地区代码,并且可能会混淆它有什么问题,与分隔本地号码相同 - 在我看来它更加用户友好.谢谢你的话!

以上是关于否定字符没有按预期工作? ^的主要内容,如果未能解决你的问题,请参考以下文章

积极的向后看没有按预期工作

为啥我的搜索功能没有按预期工作,我该如何解决?

Vigenere Cipher Key 未按预期工作

我的挤压功能没有按预期工作,我该怎么做才能修复这个功能?

为啥这个正则表达式模式不能按预期工作?

为啥在写入字符串文字时 scanf 不能按预期工作? [复制]