【问题标题】:JQuery form validations plugin regex (pattern method) problemsJQuery 表单验证插件正则表达式(模式方法)问题
【发布时间】:2019-12-02 17:10:16
【问题描述】:

这是我关于堆栈溢出的第一篇文章!

我一直在尝试使用 jquery 验证器插件来验证我在 php 上的注册表单而不提交它(我已经进行了服务器端验证)。好吧,我对 js 了解不多(目前),但我正在尝试使用这个插件中的 jquery 验证https://jqueryvalidation.org/

我还使用了额外的methods.js(包括模式),它为您提供了更多的验证方法。

让我解释一下我的情况...我在 php 上使用正则表达式来验证我的 html 表单,它就像一个魅力。当我尝试对 jquery 使用相同的正则表达式时,它会抛出错误(我已经有一些基本的代码 js 并且它可以工作)。

我尝试了很多正则表达式格式,但没有任何效果,我不知道我做错了什么。我也尝试转义代码,它不会抛出错误,但它仍然不起作用。

我一直收到“无效格式”,我似乎无法理解为什么它不起作用。 我在互联网上找到的所有正则表达式格式都不起作用,这太疯狂了,也许你可以帮助我。

这是我实际用于验证 php 中的名词(名称)输入的模式:/^\pL+(?>[ ']\pL+)*$/u

*我还复制了本地 js 中的模式方法,并从我的 .php 中删除了附加方法 cdn,但它是相同的。

** 忽略 [A-Z] 的东西,我已经尝试了很多东西,但没有一个起作用:(

这里是我的 local.js

$.validator.setDefaults({
    errorClass: 'text-danger position-absolute ml-1',
    highlight: function
 (element) {
        $(element)
            .closest('.form-control')
            .addClass('is-invalid');
    },
    unhighlight: function (element) {
        $(element)
            .closest('.form-control')
            .removeClass('is-invalid');
    },
    errorPlacement: function (error, element) {
        if (element.prop('type') === 'checkbox') {
            error.insertAfter(element.parent());
        } else {
            error.insertAfter(element);
        }
    }
});

$.validator.addMethod("pattern", function (value, element, param) {
    if (this.optional(element)) {
        return true;
    }
    if (typeof param === "string") {
        param = new RegExp("^(?:" + param + ")$");
    }
    return param.test(value);
}, "Invalid format.");

$("#reg_form").validate({
    debug: true,
    rules: {
        nombre: {
            required: true,
            pattern: [A-Z]
        },
        apellido: {
            required: true,
            lettersonly: true
        },
        email: {
            required: true,
            email: true,
        },
        password: {
            required: true,
            strongPassword: true
        },
        cpassword: {
            required: true,
            equalTo: '#password'
        }
    },
    messages: {
        nombre: {
            required: 'Requerido',
            pattern: 'Formato inválido',
            max: 'Muy largo'
        },
        apellido: {
            required: 'Requerido',
            pattern: 'Formato inválido',
            max: 'Muy largo'
        },
        email: {
            required: 'Please enter an email address.',
            email: 'Por favor ingresa un email <em>válido</em>.',
        },
        password: {
            required: true
        }
    }
});

【问题讨论】:

  • 您的正则表达式非常好。 (你可以在regex101.com 上测试它,他们有一个 PHP/PCRE 部分)。
  • PHP 正则表达式在 JS 上不起作用,谢谢您的回答!

标签: javascript jquery html regex


【解决方案1】:

您可能有一点疏忽,请将您的模式实现更改为 -

nombre: {
            required: true,
            pattern: "^[A-z\s]+$"
        },

您的模式需要是一个字符串才能实现。其次,虽然\pL 可以很好地从任何语言中获取任何字母,但并非所有编程语言都实现了它。 (查看here 了解您可以在 java 脚本中执行的操作)您最好只添加一些您希望在正则表达式中遇到的额外字母。

【讨论】:

  • 谢谢,但我很快发现 php 和 js 正则表达式模式不是一回事。现在我为每种语言使用相同但不同的正则表达式模式。问候。
猜你喜欢
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多