2013-06-18 39 views
7

Tôi đang thực hiện xác thực ngày và giờ tôi đang thực hiện người dùng đó chỉ có thể nhập numbers, /backspace vì vậy bây giờ tôi muốn thêm 2 khóa vào biểu thức chính quy của mình. Tôi muốn thêm deletearrow keys vì vậy những gì sẽ thay đổi tôi nên làm trong Regular Expression tôi .Đây mã của tôiThêm phím xóa và phím mũi tên vào Cụm từ thông dụng

<input type="text" id="date" name="date" onkeypress="check(event,this);" /> 

đây là tôi mã JavaScript

<script type="text/javascript"> 

function check(evt, id) 
{ 

var value = id.value; 

var theEvent = evt || window.event; 
var key = theEvent.keyCode || theEvent.which; 
key = String.fromCharCode(key); 

var regex = /[0-9|\b|/]/; 

if(!regex.test(key)) 
{ 
    theEvent.returnValue = false; 

    if(theEvent.preventDefault) 
    theEvent.preventDefault(); 
} 
} 



</script> 

Cảm ơn chờ đợi sự giúp đỡ của bạn.

+0

nếu bạn nghĩ bạn tìm thấy giải pháp, kiểm tra các ghi chú tôi đã thêm vào trong câu trả lời của mình, chúng có thể giúp sửa mã của bạn hoạt động như mong đợi. – CME64

Trả lời

9

Bạn có thể bỏ qua xác nhận đầu vào nếu mũi tên, xóa và các phím xóa lùi được ép

function check(evt, id) 
{ 

var value = id.value; 

var theEvent = evt || window.event; 
var key = theEvent.keyCode || theEvent.which; 

// Don't validate the input if below arrow, delete and backspace keys were pressed 
if(key == 37 || key == 38 || key == 39 || key == 40 || key == 8 || key == 46) { // Left/Up/Right/Down Arrow, Backspace, Delete keys 
    return; 
} 

key = String.fromCharCode(key); 
var regex = /[0-9|/]/; 

if(!regex.test(key)) 
{ 
    theEvent.returnValue = false; 

    if(theEvent.preventDefault) 
    theEvent.preventDefault(); 
} 
} 
+0

cảm ơn tôi đã nhận nó –

+0

Điều này thực sự là một cách nghèo để mặt nạ đầu vào, kể từ khi nhấn phím không phải là cách duy nhất mà văn bản có thể được nhập vào một lĩnh vực. Dù sao, nếu điều này làm việc cho bạn, thì bạn cũng sẽ cần phải thêm các phím 'home',' end', 'pgup',' pgdown'. – nickf

+0

Mã này sẽ không hoạt động với các dấu hiệu (, & và%, – hiew1

-1

Tại sao bạn không chỉ kiểm tra giá trị thực của phần tử, thay vì các lần nhấn tạo giá trị?

Bạn có thể sử dụng sự kiện oninput cho điều đó.

+0

Tôi muốn hạn chế người dùng nhập liệu để thêm một số ký tự –

+0

sự kiện oninput không được hỗ trợ trong trình duyệt cũ hơn (đặc biệt là IE8) và lỗi khá của nó trong IE9. Combo của onchange, onpaste và onpropertychange có thể là một cách giải quyết mặc dù. –

+0

@AzamAlvi: đó là chính xác những gì 'oninput' là cho. Đề xuất hiện tại của bạn để kiểm tra các lần nhấn phím không bao gồm nhiều cách mà bạn có thể nhập (có thể không hợp lệ) dữ liệu. Ví dụ: nhấp chuột phải vào + Dán, kéo + thả văn bản, v.v. @roasted Nếu cần hỗ trợ cho các trình duyệt cũ, thì có, bạn sẽ cần phải thực hiện một số hack, nhưng nó không phải là một câu trả lời hay. – nickf

1

bạn nên sử dụng về biến đổi và có hiệu lực thay đổi onkeyup để kiểm tra giá trị hiện hành.

sai lầm bạn có:

1- regex của bạn nên là nghịch đảo, hiện tại một séc của bạn nếu giá trị chứa bất kỳ các nhưng bạn muốn giá trị của mình để không có giá trị khác.

2- bạn nên thoát khỏi dấu gạch chéo (/) nhân vật như thế này \/để nó sẽ không được giả định là kết thúc của regex và phần còn lại sẽ trở thành công cụ sửa đổi!

Ví dụ:

document.getElementById('date').onchange = function(){ 
    var regex = /[^\d\/]/g; 
    if(regex.test(this.value)) {console.log(false); return false;} 
    else {console.log(true); return true;} 
}; 

document.getElementById('date').onkeyup = function(){ 
    this.onchange(); 
}; 

DEMO

lưu ý: chắc chắn rằng bạn xác nhận toàn bộ ngày như dd/mm/yyyy hoặc bất cứ định dạng của bạn, ngay trước khi sumission

Các vấn đề liên quan