1. 程式人生 > >使用正則表示式限制輸入框只能輸入數字

使用正則表示式限制輸入框只能輸入數字

正則表示式限制輸入框只能輸入數字     

程式碼如下:
<input type="text" onkeyup="this.value=this.value.replace(/[^/d]/g,'') " onafterpaste="this.value=this.value.replace(/[^/d]/g,'') " name="f_order" value="1"/>

其中,onafterpaste防止使用者從其它地方複製內容貼上到輸入框


輸入框只能輸入字母和下橫線的正則表示式
<input onkeyup="this.value=this.value.replace(/[^_a-zA-Z]/g,'')" onpaste="this.value=this.value.replace(/[^_a-zA-Z]/g,'')">


輸入框只能輸入字母數字和下橫線的正則表示式
<input onkeyup="this.value=this.value.replace(/[^/w]/g,'')" onpaste="this.value=this.value.replace(/[^/w]/g,'')">

<input onkeyup="this.value=this.value.replace(/[/W]/g,'')" onpaste="this.value=this.value.replace(/[/W]/g,'')">

不過上面使用的是替換的方法,因為替換的執行需要一定的時間,所以就存在個漏洞。就是隻要你操作夠快,在替換執行前你就提交了表單

那上面的限制就失效了。

要想沒有上面的BUG,就得改下觸發事件。上面是onkeyup,需要改成onkeypress。程式碼如下

<input  onkeypress="if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;" >

這裡使用的是ASCII碼,'0'的ASCII碼為48,'9'的ASCII碼為57。可以根據自己的需要修改條件。

這個沒有處理貼上事件,就是使用者可以貼上過來其它字元,只要把上面的onkeyup和onpaste事件加過來就可以了