Biểu thức chính quy cho số thập phân có độ chính xác là 2 là gì?
Ví dụ hợp lệ :
123.12
2
56754
92929292929292.12
0.21
3.1
Ví dụ không hợp lệ:
12.1232
2.23332
e666.76
Dấu thập phân có thể là tùy chọn và số nguyên cũng có thể được bao gồm.
Biểu thức chính quy cho số thập phân có độ chính xác là 2 là gì?
Ví dụ hợp lệ :
123.12
2
56754
92929292929292.12
0.21
3.1
Ví dụ không hợp lệ:
12.1232
2.23332
e666.76
Dấu thập phân có thể là tùy chọn và số nguyên cũng có thể được bao gồm.
Câu trả lời:
Mã thông báo regex hợp lệ thay đổi tùy theo triển khai. Một hình thức chung là:
[0-9]+(\.[0-9][0-9]?)?
Nhỏ gọn hơn:
\d+(\.\d{1,2})?
Cả hai đều cho rằng cả hai đều có ít nhất một chữ số trước và một chữ số sau chữ số thập phân.
Để yêu cầu toàn bộ chuỗi là một số của biểu mẫu này, hãy bọc biểu thức trong các thẻ bắt đầu và kết thúc, chẳng hạn như (ở dạng của Perl):
^\d+(\.\d{1,2})?$
Để khớp các số không có chữ số đứng trước số thập phân ( .12
) và toàn bộ số có dấu chấm ( 12.
) trong khi loại trừ đầu vào của một khoảng thời gian duy nhất ( .
), hãy thử cách sau:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
Gói phần phân đoạn vào ()?
để làm cho nó tùy chọn. Xin lưu ý rằng điều này không bao gồm các hình thức như 12.
Bao gồm sẽ giống hơn ^\d+\\.?\d{0,2}$
.
Sử dụng ^\d{1,6}(\.\d{1,2})?$
để dừng lặp lại và đưa ra hạn chế cho toàn bộ phần giá trị thập phân.
-?
, như trong -?\d+(\.\d{1,2})?
. Tôi không bao gồm phủ định hoặc bắt đầu bằng dấu thập phân vì những điểm đó không có trong câu hỏi của OP, mặc dù chúng chắc chắn hợp lệ cho định dạng số chung hơn. Chủ đề bình luận ở đây đưa ra một vài cách để xử lý ".21".
^[0-9]+(\.[0-9]{1,2})?$
Và vì các biểu thức thông thường là khủng khiếp để đọc, ít hiểu hơn, đây là tương đương dài dòng:
^ # Start of string
[0-9]+ # Require one or more numbers
( # Begin optional group
\. # Point must be escaped or it is treated as "any character"
[0-9]{1,2} # One or two numbers
)? # End group--signify that it's optional with "?"
$ # End of string
Bạn có thể thay thế [0-9]
bằng \d
hầu hết các triển khai biểu thức chính quy (bao gồm PCRE , phổ biến nhất). Tôi đã để nó như [0-9]
tôi nghĩ nó dễ đọc hơn.
Ngoài ra, đây là tập lệnh Python đơn giản mà tôi đã sử dụng để kiểm tra nó:
import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")
valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]
assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0
+
sau khi đóng paren đầu tiên,^([0-9]{0,3})(\.[0-9]{1,2})?$
\\.
thay \.
vì bởi vì .
nó sẽ trông giống như nó hoạt động, nhưng phù hợp với bất kỳ ký tự nào (không chỉ là vị trí thập phân). Ví dụ: cả hai 1z23
và 1.23
có thể được coi là hợp lệ nếu bạn không thoát khỏi nó
Để bao gồm một dấu trừ tùy chọn và không cho phép các số như 015
(có thể bị nhầm với số bát phân), hãy viết:
-?(0|([1-9]\d*))(\.\d+)?
Tôi sử dụng cái này cho tối đa hai chữ số thập phân:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
pass:
.25
0.25
10.25
+0.25
không vượt qua:
-.25
01.25
1.
1.256
^[0-9]+(\.([0-9]{1,2})?)?$
Sẽ làm cho mọi thứ như 12.
được chấp nhận. Đây không phải là những gì thường được chấp nhận nhưng nếu trong trường hợp bạn cần phải linh hoạt, thì đó là một cách để đi. Và tất nhiên [0-9]
có thể được thay thế bằng \d
, nhưng tôi đoán nó dễ đọc hơn theo cách này.
Câu trả lời chính là SAI vì nó có giá trị 5.
hoặc 5,
đầu vào
mã này xử lý nó (nhưng trong ví dụ số âm của tôi bị cấm):
/^[0-9]+([.,][0-9]{1,2})?$/;
kết quả dưới đây:
đúng => "0" / đúng => "0,00" / đúng => "0,0" / đúng => "0,00" / đúng => "0,0" / đúng => "1,2" đúng => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1.11" / true => "1.11" / false => "-5" / false => "-0.00" / true => "101" / false => "0.00.0" / true => "0.000" / true => "000.25" / false => ".25" / đúng => "100,01" / đúng => "100,2" / đúng => "00" / sai => "5." / sai => "6," / đúng => "82" / đúng => "81,3" / đúng => "
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
Sẽ không bạn cần phải thực hiện e
tronge666.76
vào tài khoản?
Với
(e|0-9)\d*\d.\d{1,2)
Điều này đã làm việc với tôi:
(-?[0-9]+(\.[0-9]+)?)
Nhóm 1 là số float của bạn và nhóm 2 chỉ là phân số.
Điều này sẽ cho phép số thập phân với số mũ và tối đa 2 chữ số,
^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$
1.2e-10
([0-9]+)?
được viết tốt hơn \d*
. Bây giờ nó không phù hợp 10e3
. Và OP muốn khớp tối đa 2 chữ số.
function DecimalNumberValidation() {
var amounttext = ;
if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
alert('Please enter only numbers into amount textbox.')
}
else
{
alert('Right Number');
}
}
Hàm sẽ xác nhận bất kỳ số thập phân số thời tiết có vị trí thập phân hay không, nó sẽ nói "Đúng số" khác "Vui lòng chỉ nhập số vào hộp văn bản số lượng." tin nhắn cảnh báo sẽ đến
Cảm ơn... :)