2012-07-02 35 views
21

Mã bên dưới là từ biểu mẫu HTML. Nếu đầu vào được coi là một số nguyên, tôi cần phải thay đổi "gõ '?Loại đầu vào cho biểu mẫu HTML cho số nguyên

<div class="friend2title"> 
    <label for="url">Add points:</label> 
</div> 
<div class="friend2field"> 
    <input name="state" type="text" id="state" maxlength="150"> 
</div> 
+0

Bạn cần hỗ trợ phiên bản trình duyệt nào? – Eric

Trả lời

20

Nếu bạn đang sử dụng HTML5, bạn nên sử dụng các loại đầu vào number. Nếu bạn đang sử dụng xhtml hoặc html 4 , loại đầu vào nên text

+0

Và sau đó xác thực rằng bạn thực sự * có * một số. Ừ. – uotonyh

+2

OK ... làm sao tôi có thể biết được mình đang sử dụng HTML 5? – John

+2

@John Bạn chỉ có thể sử dụng 'số'; tất nhiên nó sẽ thất bại trong việc xác thực HTML 4 nhưng các trình duyệt HTML 4 sẽ coi nó là kiểu 'văn bản'. – Neil

0

không, nó không phải là về loại dữ liệu đầu vào nó chỉ rõ type of control to create:..

type = text | password | checkbox | Radio | nộp | reset | tập tin | nút ẩn | hình ảnh | [CI] Thuộc tính này chỉ định loại contr ol để tạo ra. Giá trị mặc định cho thuộc tính này là "văn bản".

3

Trước HTML5, kiểu đầu vào = "văn bản" chỉ đơn giản là trường chèn văn bản tự do, bất kể bạn muốn gì. đó là công việc xác thực bạn sẽ phải thực hiện để đảm bảo người dùng nhập số hợp lệ

Nếu bạn đang sử dụng HTML5, bạn có thể sử dụng các loại đầu vào mới, một trong số đó là số nhập văn bản và buộc nó là số

hãy nhớ rằng nếu bạn đang xây dựng ứng dụng phía máy chủ (ví dụ: php), bạn sẽ vẫn phải xác thực đầu vào ở bên đó (đảm bảo rằng thực sự là một số) vì nó khá dễ dàng để hack html và thay đổi kiểu đầu vào, xóa xác thực trình duyệt

-4

Thậm chí nếu bạn muốn chấp nhận số cho đầu vào , Tôi khuyên bạn nên sử dụng loại text.

<input type="text" name"some-number" /> 

Phía máy khách chạy một số xác thực jQuery để xác minh đó là số.

Sau đó, trong mã phía máy chủ của bạn, hãy chạy một số xác thực để xác minh thực tế là giá trị bằng số.

19
<input type="number" step="1" ... 

Bằng cách thêm thuộc tính step, bạn hạn chế nhập vào số nguyên.

Tất nhiên bạn cũng phải luôn xác thực trên máy chủ. Ngoại trừ trong các điều kiện được kiểm soát cẩn thận, mọi thứ nhận được từ một khách hàng cần được coi là nghi ngờ.

+3

Phải lưu ý rằng câu trả lời này chỉ hợp lệ cho HTML5 –

+1

không ngăn bạn nhập phao theo cách thủ công –

+1

@PetrPeller Nó có thể phụ thuộc. Từ [số đầu vào MDN] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#Allowing_decimal_values) 'Cho phép các giá trị thập phân Một vấn đề với đầu vào số là bước của chúng kích thước là 1 theo mặc định - nếu bạn cố gắng nhập một số có số thập phân, chẳng hạn như "1.0", số đó sẽ bị coi là không hợp lệ. Nếu bạn muốn nhập giá trị yêu cầu số thập phân, bạn sẽ cần phản ánh giá trị này trong giá trị bước (ví dụ: bước = "0,01" để cho phép số thập phân đến hai chữ số thập phân). Dưới đây là một ví dụ đơn giản: ' – PhoneixS

9

này có thể giúp:

<input type="number" step="1" pattern="\d+" /> 

step là để thuận tiện (và có thể được thiết lập để số nguyên khác), nhưng pattern hiện một số thực thi thực tế.

Lưu ý rằng kể từ khi pattern khớp với toàn bộ biểu thức, không cần thiết phải biểu thị nó là ^\d+$.

Ngay cả với biểu thức chính quy bề ngoài chặt chẽ này, Chrome và triển khai của Firefox, thú vị cho phép e đây (có lẽ cho ký hiệu khoa học) cũng như - cho số âm, và Chrome cũng cho phép . trong khi Firefox là chặt chẽ hơn trong việc từ chối trừ khi . được theo sau bởi chỉ 0. (Firefox đánh dấu trường là màu đỏ khi đầu vào mất tiêu điểm trong khi Chrome không cho phép bạn nhập các giá trị không được phép ở địa điểm đầu tiên.)

Vì, như được quan sát bởi những người khác, nên luôn xác thực trên máy chủ (hoặc trên khách hàng quá, nếu sử dụng giá trị cục bộ trên máy khách hoặc có nhu cầu ngăn chặn người dùng từ một vòng tới máy chủ).

+0

Trong khi Chrome không, trong Firefox, việc thêm' mẫu' đảm bảo bất kỳ việc sử dụng phần phân số nào sẽ nhận được trường được đánh dấu là không hợp lệ. –

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