使用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(“$”)直接在浏览器的地址栏中,您将得到false。问题在于您的测试代码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@]+$/
它对我有效,而这段代码可能会解决这个问题,如何以及为什么解决这个问题会真正有助于提高你的文章质量。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请编辑您的答案以添加解释,并说明适用的限制和假设。