我试图用JS和JQuery的形式验证RFC (墨西哥税id)代码。我只需要验证以下Regex匹配是否返回null
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。
发布于 2019-10-25 17:55:58
在javascript的某些情况下,如ECMAScript,如果匹配失败,则调用rfc.match(rgxFisica)将返回一个数组。如果匹配通过,它将返回一个布尔true。
参见示例(https://jsfiddle.net/coq3Lugw/):
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--然后语句,然后以这样的方式返回:
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);一个真正正则表达式匹配的示例:
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);https://stackoverflow.com/questions/58563040
复制相似问题