首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么相同的单用regex在两个平台上的行为不同?

为什么相同的单用regex在两个平台上的行为不同?
EN

Stack Overflow用户
提问于 2019-10-25 17:20:44
回答 1查看 84关注 0票数 2

我试图用JS和JQuery的形式验证RFC (墨西哥税id)代码。我只需要验证以下Regex匹配是否返回null

代码语言:javascript
复制
function validateRFC(rfc) {
  const rgxFisica = "^(([A-ZÑ&]{4})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\d])|[3][01])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\d])|[3][0])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\d])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$";

  return rfc.match(rgxFisica) != null
}

const foo = validateRFC("XXXX901212UDX");
console.log(foo);

模式基本上是XXXXYYMMDDYYY,其中X必须是字母,YMD是日期值,Y可以是任何字母数字字符。

我用我的真实身份对代码进行了一个小的单元测试,它起作用了。但是,在我的测试环境中测试它时,它总是返回null。如果这很重要,我将使用Python3.7中的这是截图。将整个页面呈现出来,并且验证在document.ready

是否有可能我的Javascript对正则表达式的解释有所不同?

编辑:

嵌入式代码段似乎也返回true。我在Python3.764位环境中使用了VS2019 16.3.5,Python16.3.19252.1。

EN

回答 1

Stack Overflow用户

发布于 2019-10-25 17:55:58

在javascript的某些情况下,如ECMAScript,如果匹配失败,则调用rfc.match(rgxFisica)将返回一个数组。如果匹配通过,它将返回一个布尔true

参见示例(https://jsfiddle.net/coq3Lugw/):

代码语言:javascript
复制
function validateRFC(rfc) {
  const rgxFisica = "^(([A-ZÑ&]{4})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\d])|[3][01])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\d])|[3][0])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\d])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$";
    console.log(rfc.match(rgxFisica))

    console.log("hello 0670 world".match(rgxFisica))

  return rfc.match(rgxFisica) != null
}

const foo = validateRFC("XXXX901212UDX");
//console.log(foo);

我要做的是设置一个if--然后语句,然后以这样的方式返回:

代码语言:javascript
复制
function validateRFC(rfc) {
  const rgxFisica = "^(([A-ZÑ&]{4})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\d])|[3][01])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\d])|[3][0])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\d])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$";

  if (rfc.match(rgxFisica)) == null{
      return True
  } else {
      return False
  }
}

const foo = validateRFC("XXXX901212UDX");
//console.log(foo);

一个真正正则表达式匹配的示例:

代码语言:javascript
复制
function validateRFC(rfc) {
  const rgxFisica = "^(([A-ZÑ&]{4})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\d])|[3][01])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\d])|[3][0])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\d])([A-Z0-9]{3}))|" +
    "(([A-ZÑ&]{4})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$";

 console.log(rfc.match(rgxFisica));

  if (rfc.match(rgxFisica) == null){
      return true
  } else{
      return false
  }
}

const foo = validateRFC("hello 0670 world");
console.log(foo);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58563040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档