2010-07-11 32 views
8

Tôi đang sử dụng này: if(!preg_match('/^+[0-9]$/', '+1234567'))preg_match: không có gì để lặp lại/không phù hợp

và đang được nhận:

Cảnh báo: preg_match() [function.preg-match]: Compilation thất bại: không có gì để lặp lại tại offset 1

mọi ý tưởng tại sao?


cập nhật: Bây giờ sử dụng này: if(!preg_match('/^\+[0-9]$/', '+1234567'))

và đang nhận được không phù hợp.

mọi ý tưởng tại sao?

Trả lời

20

+ là ký tự đặc biệt cho biết 1 hoặc nhiều ký tự trước và không thoát nó, bạn đang áp dụng nó vào dấu mũ. thoát nó với \ và nó sẽ khớp với dấu cộng.

if(!preg_match('/^\+[0-9]$/', '+1234567')) 

EDIT:

Lý do tại sao nó không phù hợp là do bạn chỉ định 1 chữ số từ 0-9 và cuối của chuỗi với $. Bạn cần phải biến nó thành số lượng chữ số thay đổi.

if(!preg_match('/^\+[0-9]+$/', '+1234567')) { 

phiên bản ngắn hơn:

if(!preg_match('/^\+\d+$/', '+1234567')) { 
+0

Chúc mừng, Đã chỉnh sửa câu hỏi ngay bây giờ để phản ánh vấn đề hiện tại. – Hailwood

+0

Hailwood, bạn không nên loại bỏ vấn đề cũ, nhưng nên hiển thị cả hai cùng nhau. (chỉ cần chỉnh sửa để làm điều đó). –

+0

Ngoài ra, vấn đề hiện tại là hành vi chính xác - bạn đang yêu cầu regex khớp với một dấu cộng, một đơn 0..9, sau đó tìm vị trí cuối của dòng, mà đầu vào của bạn không làm. Để khớp với đầu vào được cung cấp của bạn, bạn muốn hoặc là '^ \ + [0-9] + $' hoặc '^ \ + [0-9] {7} $' hoặc tương tự. –

3

'/^\+[0-9]$/' có nghĩa là khởi đầu của dòng phải là dấu cộng folowed bởi một số sau đó kết thúc của dòng.

'/^\+[0-9]+$/' có nghĩa là bắt đầu của dòng phải là dấu cộng được folowed bởi số một hoặc nhiều số rồi kết thúc dòng.

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