2013-05-04 38 views
10

Tôi đang cố xác minh rằng chuỗi của tôi khớp với mẫu. Nghĩa là, chuỗi đầy đủ có thể được viết dưới dạng mẫu đó. Tuy nhiên, preg_match trả lại true, nếu bất kỳ chuỗi con nào phù hợp với mẫu đó. (Ví dụ preg_match("#[a-z]*#, "333k") trả 1, mà tôi không muốn. Trong ví dụ này, tôi thà xác minh, toàn bộ chuỗi chứa chữ cái la tinh chỉ nhỏ.)PHP preg_match chuỗi đầy đủ

Trả lời

13

Bạn sử dụng bắt đầucuối dấu , ^$ tương ứng, để cho biết bắt đầu và kết thúc chuỗi trong mẫu biểu thức chính quy của bạn. Bằng cách đó bạn có thể làm cho biểu thức chỉ khớp với toàn bộ chuỗi, không phải bất kỳ loại chuỗi con nào. Trong trường hợp của bạn, trường hợp này sẽ trông giống như sau:

preg_match("#^[a-z]*$#", "333k"); 

Bạn cũng có thể, với một trong các điểm đánh dấu này, chỉ định mẫu phải khớp với phần đầu hoặc cuối chuỗi.

+0

Ahhh, cảm ơn vì trợ giúp cực nhanh, hoạt động ngay bây giờ. – user2089648

1

Lưu ý rằng để neo kết hợp chuỗi ở đầu và cuối chuỗi, bạn cũng có thể xem xét sử dụng các neo \A\z.

preg_match('~\A[a-z]*\z~', "333k"); 
      ^^  ^^ 

Các \A\zrõ ràng bắt đầu và kết thúc của neo chuỗi trong PHP regex (như hành vi của họ không phụ thuộc vào bất kỳ bổ regex, ngay cả khi bạn chỉ định modifier m MULTILINE, họ sẽ tiếp tục khẳng định vị trí bắt đầu/kết thúc chuỗi). Xem thêm về neo regex PHP trong PHP documentation.

Cẩn thận với \Z mặc dù: \Z sẽ phù hợp với toàn bộ chuỗi trước khi linebreak single cuối cùng, trong khi \z sẽ chỉ phù hợp tại rất cuối chuỗi, có nghĩa là, sau khi tất cả các nhân vật có trong chuỗi (xem Whats the difference between \z and \Z in a regular expression and when and how do I use it?)

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