Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript在按键时验证电子邮件地址&;jquery_Javascript_Jquery_Regex - Fatal编程技术网

使用javascript在按键时验证电子邮件地址&;jquery

使用javascript在按键时验证电子邮件地址&;jquery,javascript,jquery,regex,Javascript,Jquery,Regex,我试图阻止用户在键入电子邮件地址时输入无效字符。我不是试图将整个值作为一个整体进行验证(稍后会发生) 我“认为”这是防止字符列表(如#或$)的正确方法: /[A-Z0-9a-z@]^[$#<>?]/ /[A-Z0-9a-z@]/ /^[$#<>?]/ 此部分失败: /[A-Z0-9a-z@]^[$#<>?]/ /[A-Z0-9a-z@]/ /^[$#<>?]/ /^[$#?]/ 有什么想法吗?试试/[^$#?]/ ^内部和直接位于开头

我试图阻止用户在键入电子邮件地址时输入无效字符。我不是试图将整个值作为一个整体进行验证(稍后会发生)

我“认为”这是防止字符列表(如#或$)的正确方法:

/[A-Z0-9a-z@]^[$#<>?]/
/[A-Z0-9a-z@]/
/^[$#<>?]/
此部分失败:

/[A-Z0-9a-z@]^[$#<>?]/
/[A-Z0-9a-z@]/
/^[$#<>?]/
/^[$#?]/
有什么想法吗?

试试
/[^$#?]/

^
内部和直接位于开头括号之后的at使类为负数

您可以在上了解更多关于此的信息

或者更好的是,这里有一个简单的正则表达式,用你的作为开始


您不需要将所有需要禁止的特殊字符写入正则表达式中,因为将有一个大的列表,只需编写允许的字符,因为它们较少(您已经完成了,可能只剩下一个或两个字符,即
点,下划线

您用来测试输入字符有效性的代码已经很好了,这将只验证字符是否超出
[A-Z0-9a-z@]
,可能您可以为其他两个字符设置
[A-Z0-9a-z@.

keychar = String.fromCharCode(keynum);
regEx = /[A-Z0-9a-z@]/;
return regEx.test(keychar);

修复:
问题是某些keynum值与不需要的字符冲突。这个修好了

// **********************
// .emailOnly
// Use -
// Makes the element email-only.
//
// Example -
// $('.myElement').emailOnly();
// **********************
(function($) {
    $.fn.extend({
        emailOnly: function() {
            return this.each(function() {
                return $(this).keypress(function(e, text) {

                    var keynum;
                    var keychar;
                    var regEx;
                    var allowedKeyNums = [8, 9, 35, 36, 46]; // Backspace, Tab, End, Home, (Delete & period)

                    if (window.event) // IE
                        keynum = e.keyCode;
                    else if (e.which) // Netscape/Firefox/Opera
                        keynum = e.which;
                    else
                        keynum = e.keyCode

                    keychar = String.fromCharCode(keynum);
                    regEx = /[^$#<>?]/ // Undesirable characters

                    // Test for keynum values that collide with undesirable characters
                    if ($.inArray(keynum, allowedKeyNums) > -1)
                        return regEx.test(keychar);

                    regEx = /[A-Z0-9a-z@]/
                    return regEx.test(keychar);
                });
            });
        }
    });
})(jQuery);
//**********************
//.仅限电子邮件
//使用-
//使元素仅为电子邮件。
//
//范例-
//$('.myElement').emailOnly();
// **********************
(函数($){
$.fn.extend({
emailOnly:function(){
返回此值。每个(函数(){
return$(this).keypress(函数(e,文本){
var-keynum;
var-keychar;
var regEx;
var allowedKeyNums=[8,9,35,36,46];//退格、制表符、结束、主(删除和句点)
if(window.event)//IE
keynum=e.keyCode;
else if(e.which)//Netscape/Firefox/Opera
keynum=e.which;
其他的
keynum=e.keyCode
keychar=String.fromCharCode(keynum);
正则表达式=/[^$#?]///不需要的字符
//测试与不需要的字符冲突的keynum值
if($.inArray(keynum,allowedKeyNums)>-1)
返回正则表达式测试(keychar);
正则表达式=/[A-Z0-9a-z@]/
返回正则表达式测试(keychar);
});
});
}
});
})(jQuery);

如上所述,克拉
^
需要放在括号内,如果您只是想防止无效字符,那么就没有必要使用
[A-Z0-9a-z@]
(这是电子邮件中不完整的有效字符列表)奇怪的是,使用regEx=/[A-Z0-9a-z@][^$#?]/仍然允许#通过?是的,请看,你是regex,它不包括转发器,也不检查@应该在哪里,也不检查结尾至少应该有一个点+tld:我不想验证整个文本(稍后会发生这种情况)。我正在阻止无效字符进入。在这种情况下,这对我来说就像一个符咒:只要它是我们要检查的第一个字符,哦,这很好。根据规范,如果正确引用,电子邮件地址中允许任何字符。此代码将阻止具有有效电子邮件地址的用户。要正确验证电子邮件地址,您的正则表达式需要稍微复杂一些:@Graham谢谢。但是,我并不是要验证整个文本(稍后会发生),我很高兴您找到了解决问题的方法。但是,不应将实际答案/解决方案编辑到您的问题中。一般来说,你应该通过提问来澄清问题,但不要在问题中包含答案。用你用来解决问题的代码创建你自己的答案。当你自己解决了这个问题后,非常感谢你。然而,奇怪的是,#$字符仍然通过?这是完美的工作方式,请尝试键入
javascript:alert(/[A-Z0-9a-z@]/.test(“$”)regEx.test(keychar)
,请尝试纠正它,首先尝试直接
return/[A-Z0-9a-z@]/.test($)代替它。Puneet尝试键入
javascript:alert(/[A-Z0-9a-z@]/.test(“ascacasc$”)
在浏览器中要了解问题(应该是错误的,因为它有一个非法字符)您告诉我您只测试一个字符的字符串,要测试一个多字符的字符串,您需要修改您的正则表达式如下:
/[a-Z0-9a-z@]+/
,实际上您必须使用
^regex$
,这意味着从开始到结束,有效字符仅在regex中,因此最后它变成:
/^[A-Z0-9a-z@]+$/
它对我有效,而这段代码可能会解决这个问题,如何以及为什么解决这个问题会真正有助于提高你的文章质量。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请编辑您的答案以添加解释,并说明适用的限制和假设。