Javascript相同的正则表达式返回不同的结果

Javascript相同的正则表达式返回不同的结果,javascript,regex,Javascript,Regex,我有一个代码如下: var regexp = /((^\u002b[6][0]([1-9]{2}))|(^[0]([1-9]{1})))((\s)|(\u002d)|(\s\u002d\s)?)(\d{3,})((\s)|(\u002d)|(\s\u002d\s)?)(\d{3})(\d)?$/, str = '+60123456789', boo = 'false'; (!regexp.test(str)) ? boo = 'false' : boo = 'true'; c

我有一个代码如下:

var regexp = /((^\u002b[6][0]([1-9]{2}))|(^[0]([1-9]{1})))((\s)|(\u002d)|(\s\u002d\s)?)(\d{3,})((\s)|(\u002d)|(\s\u002d\s)?)(\d{3})(\d)?$/,
    str = '+60123456789',
    boo = 'false';

(!regexp.test(str)) ? boo = 'false' : boo = 'true';

console.log(boo);
我测试了代码,结果在本地主机上返回了
boo='true'
,但在本地主机上返回了
boo='false'

为什么呢?我的regexp代码有什么问题吗

编辑:

谢谢你指出我奇怪的三元陈述

我更正了它,但在和我的本地主机中仍然得到不同的结果

var regexp = /((^\u002b[6][0]([1-9]{2}))|(^[0]([1-9]{1})))((\s)|(\u002d)|(\s\u002d\s)?)(\d{3,})((\s)|(\u002d)|(\s\u002d\s)?)(\d{3})(\d)?$/,
    str = '+60123456789',
    boo = 'false';

boo = regexp.test(str) ? 'true' : 'false';

console.log(boo);
编辑2:

上一次我犯了一个错误。已更正,但仍存在差异

根据的请求,我的regexp用于过滤数字。它应该接受以
+60
开头的任意数字,后跟任意两个数字,或者
0
后跟任意一个数字。中间部分只允许使用空格和连字符

显然,我也引起了和之间的小冲突(我非常感谢他们的帮助!)。检查后,我的str值相同。而localhost确实仍然显示出不同的结果

编辑3:

收件人:我使用Microsoft WebMatrix 3运行本地主机,这很重要。并且两个实例都使用相同的浏览器

编辑4:

谢谢他对我的正则表达式的详细检查。然而,我这边的分歧仍然存在

根据他的建议更新了regexp

regexp = /((^\u002b[6][0]([1-9]{2}))|(^[0]([1-9]{1})))((\s)|(\u002d)|(\s\u002d\s)?)(\d{3,4})((\s)|(\u002d)|(\s\u002d\s)?)(\d{3})(\d)?$/;
                                                                                         ^

.

您的正则表达式有一点模糊

/((^\u002b[6][0]([1-9]{2}))|(^[0]([1-9]{1})))((\s)|(\u002d)|(\s\u002d\s)?)(\d{3,})((\s)|(\u002d)|(\s\u002d\s)?)(\d{3})(\d)?$/
如果我们一次分解一部分:

((^\u002b[6][0]([1-9]{2}))|(^[0]([1-9]{1}))

将匹配
+60
后跟2个非零数字,或0后跟1个非零数字

((\s)|(\u002d)|(\s\u002d\s)?)

将匹配单个空格、单个破折号或由空格包围的破折号,或不匹配

(\d{3,})


然后匹配3个或更多数字我不确定您的regexp是否正确,但是
(!regexp.test(str))?boo='false':boo='true'看起来很奇怪。使用
boo=regexp.test(str)?'真’:‘假’instead@smnbbrv谢谢你指出这一点。但是,是什么让结果不同呢?对不起,我只是javascript和regexp的初学者。是的。。。boo在小提琴上是真的。。。也许你在本地主机上做得不对。你的JSFIDLE给出了正确的结果。你是在“本地主机”上运行的吗?从技术上讲,JSFIDLE中的javascript是在本地机器上的浏览器中运行的。我不想告诉你但是。。。本地主机仍然显示为
false
,而JSFIDLE显示为
true
。在使正则表达式明确无误后仍然不同?不幸的是仍然不同。详情请参见编辑4