我正在尝试阻止用户在输入电子邮件地址时输入无效字符。我不试图将整个价值验证为整体(稍后发生)。
我“认为”这是阻止字符列表(例如#或$)的正确方法:
/[A-Z0-9a-z@]^[$#<>?]/
此部分有效:
/[A-Z0-9a-z@]/
此部分失败:
/^[$#<>?]/
有什么想法吗?
答案 0 :(得分:5)
请尝试/[^$#<>?]/
。
<{1}} 里面的<{1>} ,并且在开始括号后面直接使该类为负数。
上详细了解相关信息或者更好的是,这是一个简单的正则表达式,用你的作为开始。
答案 1 :(得分:2)
$('input[type=email]').on('keypress', function (e) {
var re = /[A-Z0-9a-z@\._]/.test(e.key);
if (!re) {
return false;
}
});
答案 2 :(得分:1)
你不需要将所有特殊字符都写入需要禁止的正则表达式中,因为会有一个大的列表,简单地写一些允许的,因为它们较少(你已经完成了也许只剩下一两个字符,即DOT,UnderScore
。
您用来测试输入字符有效性的代码已经很好了,这样可以验证字符是否仅在[A-Z0-9a-z@]
之外,可能您可以为其他两个字符设置[A-Z0-9a-z@\._]
。
keychar = String.fromCharCode(keynum);
regEx = /[A-Z0-9a-z@]/;
return regEx.test(keychar);
答案 3 :(得分:1)
<script type="text/javascript">
<!--
var email='1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.@_'
var bksp = 'backspace'
var alt = 'alt'
function alpha(e,allow) {
var k;
k=document.all?parseInt(e.keyCode): parseInt(e.which);
return (allow.indexOf(String.fromCharCode(k))!=-1);
}
// -->
</script>
<input type="text" onkeypress="return alpha(event,email+bksp+alt)" />
答案 4 :(得分:0)
<强> FIXED:强>
问题是一些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);