2010-07-07 31 views
6

Ai đó có thể cung cấp cho tôi cụm từ thông dụng cho các mẫu sau không?Cụm từ thông dụng để khớp với số tiền đô la

$ 1234

$ 31234,3

$ 1234,56

$ 123456,78

$ .99

Yêu cầu của tôi là các chữ số trước chữ số thập phân không được vượt quá 6 và sau dấu thập phân nó không nên vượt quá 2 chữ số. Làm ơn giúp tôi. Cảm ơn trước ..

+0

Tôi nghĩ có các phím tắt/bí danh regex cho các chữ số thập phân, vì vậy tất cả các đề xuất có chứa [0-9] này có thể được thay thế bằng các chữ số đó. –

+2

Đó là sự thật và đáng chú ý. Tôi luôn muốn sử dụng những cái rõ ràng hơn nếu dạng dài không nhiều hơn các phím tắt. Đối với những thứ như khoảng trắng của nó gây phiền nhiễu để viết nó ra đầy đủ, cho những chữ cái và số tôi tìm thấy nó có nghĩa là họ có nhiều hơn trong nháy mắt dễ đọc cho những người ít sử dụng để regex (và do đó các phím tắt lớp nhân vật). – Chris

+0

Không có số tiền âm, ví dụ: tiền hoàn lại? –

Trả lời

9
^\$(?=.*\d)\d{0,6}(\.\d{1,2})?$ 

(?=.*\d) làm cho chắc chắn rằng có ít nhất một chữ số trong chuỗi. Nếu không có điều đó, regex ^\$\d{0,6}(\.\d{1,2})?$ sẽ khớp với chuỗi $.

Btw, lookahead không cần phải dài này; ngay cả một đơn giản (?=.) sẽ làm, như regex đảm bảo rằng các ký tự tiếp theo thực sự là hợp lệ. Do đó, nó có thể được đơn giản hóa để

^\$(?=.)\d{0,6}(\.\d{1,2})?$ 
+1

Lợi ích của việc sử dụng (? =. */D) trên/d {1,6} trong kết quả thập phân đầu tiên là gì? Tôi cảm thấy tôi đang thiếu một cái gì đó ở đây. – Lazarus

+1

@Lazarus '\ d {1,6}' yêu cầu ít nhất một chữ số trước dấu thập phân - nó sẽ không khớp với '$ .99' – Amarghosh

+0

Điểm tốt, tốt đẹp :) Cảm ơn vì điều đó. – Lazarus

4
^\$[0-9]{0,6}(\.[0-9]{1,2})?$ 
+0

bạn sẽ cần phải thoát khỏi dấu chấm thập phân đó - bây giờ nó sẽ khớp với bất kỳ thứ gì. –

+0

Điểm tốt. Cảm ơn. Tuyệt vời của nó bao nhiêu lần tôi làm điều đó và làm thế nào tôi không bao giờ nhận thấy bởi vì tất nhiên nó phù hợp với một dấu chấm ... ;-) – Chris

+0

Bạn không quên để thoát khỏi cái gì khác quá? @Hans – Amarghosh

1
/^\$([0-9]{0-6})|^\$([0-9]{0-6})+\.([0-9]{0-2})$|\$\.([0-9]{0-2})$/ 
2

Các mô hình sẽ là:

^\$\d{0,6}(\.\d{0,2})?$ 

này không xác minh rằng có bất kỳ chữ số như vậy "$". là kết quả hợp lệ và kết quả hợp lệ được cung cấp cho các yêu cầu ban đầu của người hỏi.

Để giải thích:

^ có nghĩa là chỉ phù hợp nếu không có gì trước khi chuỗi Tôi đang tìm, tức là "USD $ 123,45" sẽ thất bại trong ví dụ này là $ (phù hợp với \$) không phải là ngay sau khi bắt đầu chuỗi.

\$ khớp với ký tự $, việc sử dụng dấu chéo ngược() được gọi là thoát và được sử dụng để cho phép bạn khớp các ký tự dành riêng (có nghĩa là nội dung nào đó trong cụm từ thông dụng) trong trường hợp này $ có nghĩa là khớp với cuối chuỗi, tức là không có ký tự sau thời điểm này

\d sẽ phù hợp với bất kỳ ký tự chữ số thập phân, tức là 0-9

{n,m} sẽ phù hợp với từ n đến m trường hợp của các yếu tố trên, nếu n là 0 thì nó có hiệu quả có nghĩa là trận đấu là tùy chọn.

\. sẽ khớp với dấu thập phân, nó được thoát như. là ký tự dành riêng trong cụm từ thông dụng có nghĩa là khớp với bất kỳ ký tự nào

(...) mang cụm từ thông dụng bên trong với nhau, có những hậu quả khác nhưng tôi sẽ để lại cho bạn khám phá.Trong trường hợp này, hoàn toàn có lợi cho nhân vật tiếp theo trong cụm từ thông dụng

? sẽ khớp 0 hoặc 1 của phần tử trước (trong trường hợp này nhóm tìm dấu thập phân và tối đa 2 ký tự thập phân, vì vậy chúng tôi hy vọng không có dấu thập phân với các ký tự sau (0 lần xuất hiện) hoặc dấu thập phân với tối đa 2 ký tự thập phân (1 lần xuất hiện))

$ khớp với phần cuối của chuỗi, không có ký tự nào trong chuỗi sau thời điểm này.

+0

không khớp với ví dụ cuối cùng của OP – Amarghosh

+0

@Amarghosh, được sửa đổi. – Lazarus

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