如何禁止电子邮件用户名的第一个和最后一个字符中的特殊字符

时间:2012-05-18 22:23:54

标签: jquery regex validation character

我有一个表单,我正在尝试进行验证。要求声明电子邮件用户名中允许使用下划线和连字符,但不允许使用特殊字符(包括连字符和下划线)作为电子邮件用户名的前导和/或尾随字符。

这是否可以在表单验证中使用正则表达式完成?或者它将在一个单独的jquery函数中完成?我正在尝试在将特殊字符用作电子邮件用户名的第一个或最后一个字符的情况下触发错误。

这是我的电子邮件字段的验证码:

email: function(value, element) {
        // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
        return this.optional(element) || /^((([a-z]|\d|[\-\_]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[\-\_]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value);
    },

以下是注册表格验证的代码:

if (form == 'registration') {
    var validation_rules = {
        rules: {
            password_confirm: {
                equalTo: "#password"
            },
            email: {

            },
            email_confirm: {
                equalTo: "#email"
            },
            dd_reg_month: "required"
        },
        groups: {
            birthday: "dd_reg_month dd_reg_year"
        },
        errorPlacement: function(error, element) {
            if (element.attr("name") == "dd_reg_month" || element.attr("name") == "dd_reg_year") $("#reg_birthday").append(error);
            else error.insertAfter(element);
        },
        validClass: "success",
        success: "success",
        focusInvalid: false,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            var ipAddress =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
                if (errors) {
                    var message = errors == 1 ? 'Please correct the error below' : 'Please correct the ' + errors + ' errors below.';
                    $("div.error_info").html(message);
                    $("div.error_info").show();

                } else {
                    $("div.error_info").hide();
                    $('form input.success').css('border-color', 'green');
                }
        },
        ignore: ".ignore"


    };
}

任何帮助,甚至是如何处理前导和尾随角色的线索,都会非常棒。

3 个答案:

答案 0 :(得分:0)

如果特殊要求应该触发与常规无效电子邮件相同的错误,您可以将其放入验证功能。

它可能包含在电子邮件验证正则表达式中,但我不打算深入改变它。在验证电子邮件之后,我的下面的代码将使用额外的正则表达式来测试您的特殊情况。

email: function(value, element) {
    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
    var valid = this.optional(element) || /^((([a-z]|\d|[\-\_]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[\-\_]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value);
    return valid && /^[a-z].*[a-z]@.+/i.test(value);
},

答案 1 :(得分:0)

我不知道jquery,但如果正则表达式是.NET,可能只是插入一些前瞻和后瞻断言可能会解决问题。

这是扩展的。只需查看它们的添加位置并将其插入正则表达式中即可 如果它运作良好,如果没有,值得尝试。

/
  ^
    (

(?![_-])

      (
         (
            [a-z]
          | \d
          | [\-\_]
          | [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
         )+
         (
           \.
           (
              [a-z]
            | \d
            | [\-\_]
            | [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
           )+
         )*

(?<![_-])

      )

    |

      (
        (\x22)                                           "

(?![\x01-\x20\x7f]*[_-])

        (
           (
              (
                 (\x20|\x09)*
                 (\x0d\x0a)
              )?
              (\x20|\x09)+
           )?
           (
              (
                 [\x01-\x08\x0b\x0c\x0e-\x1f\x7f]
               | \x21       
               | [\x23-\x5b]
               | [\x5d-\x7e]
               | [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
              )
            |
              (
                 \\
                 (
                    [\x01-\x09\x0b\x0c\x0d-\x7f]
                  | [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
                 )
              )
           )
        )*
        (
           (
              (\x20|\x09)*
              (\x0d\x0a)
           )?
           (\x20|\x09)+
        )?

(?<![_-][\x01-\x20\x7f]*)

        (\x22)                                           "
      )
    )

    @

    ((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i

答案 2 :(得分:0)

谢谢你们的贡献!我找到了一些可以解决问题的正则表达式 - 这个网站非常有用:http://regexlib.com/DisplayPatterns.aspx

我使用的模式是由Rob Eberhardt发布的:

^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$

如果有人遇到同样的问题,我会分享。如果您需要通过电子邮件验证执行其他操作,请查看正则表达式库,它有很多很棒的模式。我是regex的新手,直到今天还没有听说过。 : - )

再次感谢!