Tôi muốn người dùng chỉ nhập 0-9 và chỉ một lần "."PHP regex - số thực hợp lệ
patt = /[^0-9(.{1})]/
1.2222 -> true
1.2.2 -> false (only once '.')
giúp tôi, cảm ơn!
Tôi muốn người dùng chỉ nhập 0-9 và chỉ một lần "."PHP regex - số thực hợp lệ
patt = /[^0-9(.{1})]/
1.2222 -> true
1.2.2 -> false (only once '.')
giúp tôi, cảm ơn!
Bạn có thể sử dụng is_numeric()
với thông báo trước rằng nó chấp nhận nhiều hơn một chút so với mức mong muốn (ví dụ: 1e4
).
Tại sao không chỉ sử dụng is_numeric
nếu bạn không có kinh nghiệm với cụm từ thông dụng.
Với regex của bạn: .
khớp với tất cả các ký tự, \.
khớp với dấu chấm. {1}
là không cần thiết. Và tôi không biết bạn đang cố gắng làm gì với [^ ... ]
. Đọc số regular expressions tutorial nếu bạn thực sự muốn sử dụng cụm từ thông dụng ở đâu đó trong mã của mình.
Tại sao không sử dụng http://php.net/manual/en/function.is-float.php? Nhưng dù sao đi nữa, RegEx sẽ là ^[\d]+(|\.[\d]+)$
vui vẻ!
/^-?(?:\d+|\d*\.\d+)$/
Điều này phù hợp với phao bình thường, ví dụ: 3.14
, viết tắt chỉ cho phần thập phân, ví dụ: .5
và số nguyên, ví dụ: 9
cũng như số âm.
đây là những gì bạn đang tìm kiếm
$re = "~ #delimiter
^ # start of input
-? # minus, optional
[0-9]+ # at least one digit
( # begin group
\. # a dot
[0-9]+ # at least one digit
) # end of group
? # group is optional
$ # end of input
~xD";
này chỉ chấp nhận "123" hoặc "123,456", không phải" .123" hoặc "14e + 15". Nếu bạn cũng cần các biểu mẫu này, hãy thử is_numeric
+1 để nhận xét từng bước – alex
D là gì? – AntonioCS
@AntonioCS nó dành cho dấu phân cách kết thúc $ [ref về PCRE modifiers] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php) 'D (PCRE_DOLLAR_ENDONLY) Nếu công cụ sửa đổi này là thiết lập, một metacharacter đô la trong mẫu chỉ khớp ở cuối chuỗi chủ đề. Nếu không có công cụ sửa đổi này, một đồng đô la cũng khớp ngay trước ký tự cuối cùng nếu nó là một dòng mới (nhưng không phải trước các dòng mới khác).Công cụ sửa đổi này bị bỏ qua nếu m modifier được thiết lập. Không có tương đương với công cụ sửa đổi này trong Perl.' FYI: x là để mở rộng: để chặn bất kỳ ký tự khoảng trắng nào – MediaVince
Cụm từ thông dụng dành cho các mẫu chuỗi phù hợp. Nếu bạn không rõ ràng sau khi xác thực định dạng chuỗi đầu vào (nhưng giá trị thực tế), bạn cũng có thể sử dụng
filter_var("1.33", FILTER_VALIDATE_FLOAT);
để đảm bảo đầu vào có thể được sử dụng làm giá trị float. Điều này sẽ trả lại FALSE
nếu nó không phải là một phao và giá trị phao hoặc số nguyên khác. Mọi quy tắc type juggling đều được áp dụng.
regex này:
\d*(?:\.\d+)?
sẽ cho kết quả:
123 -> true
123.345 -> true
123. -> true
.345 -> true
0.3345 -> true
Tuy nhiên, bạn phải kiểm tra sự trống rỗng của đầu vào trước khi sử dụng nó vì regex cũng cho phép zero-length đầu vào.
Bạn cần phải kèm theo các thay đổi trong dấu ngoặc đơn, nếu không thì neo chuỗi bắt đầu sẽ chỉ được thực thi với số nguyên và chuỗi cuối chuỗi chỉ với số thập phân. –
Bắt tốt, cố định. –
Điều này cũng phù hợp với tôi đối với INT. Cảm ơn. – Strabek