2017-10-12 229 views
0

我目前正在開發一個C#MVC項目。在輸入數據庫中的用戶詳細信息時,我需要將我的手機字段自定義爲只接受數字。經過一番搜索,我發現下面的代碼:如何防止文本框複製到該字母?

$(document).on("keypress","#MobilePhone", function (e) { 
    var regex = new RegExp("^[0-9]\d*$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (regex.test(str)) { 
     return true; 
    } 
    e.preventDefault(); 
    return false; 
}); 

此代碼適用於我,它只允許在文本框中輸入數字。

但有一個問題,如果用戶複製一些文本,然後將內容粘貼到文本框中,則什麼都不會發生。然後,如果我按提交按鈕它提交併發生錯誤。

所以後來我發現這樣一個問題:Disable Copy or Paste action for text box?

問題的答案是:

$('#email').bind("cut copy paste",function(e) { 
    e.preventDefault(); 
}); 

但我想這之後我甚至沒有數字複製到文本框。有什麼方法可以防止僅複製字母和特殊字符。

+0

你需要添加邏輯到第二'bind'方法檢查/處理什麼被粘貼。此時'e.preventDefault()'只會阻止所有的內容 – DiskJunky

+0

,您可以使用內置的'並使用min和max屬性來控制最小值和最大值。 –

回答

1

就在你的綁定,防止剪切/複製/粘貼非數字增加一些檢查:https://jsfiddle.net/hswtutd9/

$(function() { 
    $("#email").bind("cut copy paste", function(e) { 
    const data = e.originalEvent.clipboardData.getData("Text") 

    if(! /\d./.test(data)) { 
     e.preventDefault() 
    } 
    }) 
}) 
1

爲什麼你使用文本作爲你的輸入類型?

,如果你使用的是強類型的視圖,即編輯器,那麼就使用數據標註

[DataType(DataType.PhoneNumber)] 
public string PhoneNumber{get;set;} //i've used string here believing you initially made it as string and hence not effecting the code elsewhere 

如果您使用HTML的輸入嘗試

INPUT TYPE =「電話」注意一些brawser不支持電話對他們來說我寧願號

1

你可以把電話號碼驗證碼的功能,並呼籲如果這兩個地方,如:

function IsValidPhoneNumber(number) { 
    var regex = new RegExp("^[0-9]\d*$"); 

    if (regex.test(number)) { 
     return true; 
    } 
    return false; 
} 

,現在你可以把它叫做這兩個地方,如:

$(document).on("keypress","#MobilePhone", function (e) { 

    if(!IsValidPhoneNumber($(this).val())) { 

     e.preventDefault(); 
     return false; 
    } 
} 

$('#MobilePhone').bind("cut copy paste",function(e) { 

    if(!IsValidPhoneNumber($(this).val())) { 

     e.preventDefault(); 
     return false; 
    } 
}); 

或更多更好的將是一個單一的事件:

$(document).on("cut copy paste keypress","#MobilePhone", function (e) { 

    if(!IsValidPhoneNumber($(this).val())) { 

     e.preventDefault(); 
     return false; 
    } 
} 

現在將允許複印若值滿足正則表達式,你可能需要調整函數來檢查整個數字,但這應該讓你知道如何允許它在那裏。

希望它有幫助!

相關問題