【问题标题】:The difference of Regex between js and javajs和java Regex的区别
【发布时间】:2014-01-16 02:03:39
【问题描述】:

我有以下正则表达式来测试手机号码:/^1[0-9]{10}|[0-9]{8}$/。 如果我有字符串"123456789",我用Java 对其进行测试,结果为假;但在 JavaScript 中,结果为真。谁能告诉我原因?

【问题讨论】:

  • 我不相信 Java 测试的结果是错误的。
  • 正则表达式说,“一个 '1' 后跟 10 位数字或 8 位数字。
  • @Pointy,如果是/^1([0-9]{10}|[0-9]{8})$/,不就是这样吗,这个匹配不是像/^(1[0-9]{10}|[0-9]{8})$/吗?我没有尝试在 java 中运行它
  • 实际上,它表示1 后跟 10 位数字和任何内容,或者以 8 位数字结尾的字符串
  • @minitech 是的,你是对的。关键是,它匹配搜索字符串。

标签: java javascript regex


【解决方案1】:

在 Java 中,您可能正在使用 match。类似的东西;我对Java不是很熟悉。无论如何,主要思想是该方法仅在字符串的 beginning 处检查匹配项。您的正则表达式匹配以1 开头的字符串和多10 位数字,或以8 位数字结尾的字符串; 123456789 两者都不是。在 JavaScript 中,String.prototype.matchRegExp.prototype.execRegExp.prototype.test 这三个都可以检查任何地方。

我想你的意思是:

/^(1[0-9]{10}|[0-9]{8})$/

但那还是错了; 123456789 几乎不会匹配,这是更具限制性的。我不确定你的意图是什么,但它不起作用:

  • +12 (345) 678‒9___ 中缺少三个数字
  • +1 (234) 567‒89__ 中缺少两个数字
  • (123) 456‒789 中缺少一个数字
  • 123‒4567 中有两个太多数字 | 89

不过,我不太了解其他国家/地区的电话号码格式。

【讨论】:

  • 是的,我需要javaScript的结果是假的。但它是真的。你是对的,非常感谢你
  • @chaser:然后使用组,就像提供的示例一样。
猜你喜欢
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多