我有一个表格,我尝试在其中验证提供商的 RFC。如果供应商是法人,则必须有 12 个字符,如果是自然人,则必须有 13 个字符。
我使用以下函数进行验证:
$(function ValidaRFC($rfc) {
var strCorrecta;
strCorrecta = $rfc;
if ($("#TipoPersona :selected").text() == "Moral") {
if ($($rfc).length == 12) {
var valid = '^(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))';
}
}
if ($("#TipoPersona :selected").text() == "Fisica") {
if ($($rfc).length == 12) {
var valid = '^(([A-Z]|[a-z]|\s){1})(([A-Z]|[a-z]){3})([0-9]{6})((([A-Z]|[a-z]|[0-9]){3}))';
}
}
var validRfc = new RegExp(valid);
var matchArray = strCorrecta.match(validRfc);
if (matchArray == null) {
alert('el rfc es incorrecto');
return false;
}
});
但是没有任何反应,即使我输入了超过 12 或 13 个字符,它也可以让我保存提供程序。
在 rfc 输入中,我使用onblur = "ValidaRFC(this.value)"
问题不在于 RegExp,而在于
$(function(){ ... })
: 根据jQuery文档,表达式$(function(){ ... })
是等价的:这意味着您没有定义函数
ValidaRFC
,而是在文档加载时执行它。因此,当blur
触发文本框事件时,您的函数不会被执行(因为它是未定义的)。解决方案:(已编辑)
因此,在
blur
文本框的情况下,该函数将按预期触发。$(document).ready(function(){ tu codigo })
必须替换为$(function() { tu codigo })
,因此 jquery 将采用已声明的函数,因为如果没有,它将显示该函数尚未声明