我試圖阻止用戶在輸入電子郵件地址時輸入無效字符。我是不是試圖驗證整個值(後面會發生)。使用javascript&jquery驗證按鍵上的電子郵件地址
我 「認爲」 這是爲了防止一組字符(如#或$)的正確方法是:
/[[email protected]]^[$#<>?]/
這部分工作:
/[[email protected]]/
這部分失敗:
/^[$#<>?]/
有什麼想法?
我試圖阻止用戶在輸入電子郵件地址時輸入無效字符。我是不是試圖驗證整個值(後面會發生)。使用javascript&jquery驗證按鍵上的電子郵件地址
我 「認爲」 這是爲了防止一組字符(如#或$)的正確方法是:
/[[email protected]]^[$#<>?]/
這部分工作:
/[[email protected]]/
這部分失敗:
/^[$#<>?]/
有什麼想法?
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 = /[[email protected]]/
return regEx.test(keychar);
});
});
}
});
})(jQuery);
嘗試用/[^$#<>?]/
代替。
^
裏面和在開幕式後直接使班級消極。
您可以瞭解更多有關這對regular-expressions.info
或者更好的,繼承人workign簡單的regex,做它,使用你作爲一個開始。
你不需要寫所有的特殊字符爲正則表達式需要被禁止的,因爲會有一個大名單,簡單寫了允許的那些,因爲它們不太(你已經完成了,可能只剩下一兩個字符,即DOT,UnderScore
)。
你用來測試輸入字符的有效性的代碼已經很好了,這將驗證字符只能在[[email protected]]
之外,可能你可以爲其他兩個字符設置[[email protected]\._]
。
keychar = String.fromCharCode(keynum);
regEx = /[[email protected]]/;
return regEx.test(keychar);
非常感謝。然而,奇怪的是,#$字符仍然通過? –
這是完美的工作,嘗試在瀏覽器的地址欄中直接輸入'javascript:alert(/ [A-Z0-9a-z @] /。test(「$」));'會得到錯誤信息。問題出現在你的測試代碼'regEx.test(keychar)'中,嘗試糾正它,首先嚐試直接'return/[A-Z0-9a-z @] /。test(「$」);'代替它。 – teenup
Puneet嘗試在瀏覽器中輸入'javascript:alert(/ [A-Z0-9a-z @] /。test(「ascacasc $」));'以理解問題(它應該是錯誤的,因爲它具有不合法的字符) – sg3s
<script type="text/javascript">
<!--
var email='[email protected]_'
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)" />
$('input[type=email]').on('keypress', function (e) {
var re = /[[email protected]\._]/.test(e.key);
if (!re) {
return false;
}
});
你可以加一些解釋請 –
它適合我 –
雖然這段代碼可以解決這個問題,[包括說明]( http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)如何以及爲什麼解決這個問題真的有助於提高你的帖子的質量。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 – Makyen
根據規範,如果引用正確的電子郵件地址,則允許任何字符。此代碼將阻止具有有效電子郵件地址的用戶。 –
您的正則表達式需要比正確驗證電子郵件地址更復雜一點:http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html – Graham
@格拉漢姆謝謝。但是,我並沒有試圖驗證文本是否爲整體(稍後會發生)。 –