2012-01-02 43 views
15

tôi cần phải phù hợp sử dụng biểu thức chính quy trong các địa chỉ php như:preg_match địa chỉ php đường

  • 144 đường phố, thành phố, tiểu bang zip/mã bưu chính
  • 144 đường phố, apt # 1, thành phố, zip bang/mã bưu chính
  • 144 đường apt # 1, thành phố zip bang/mã bưu chính

Các zip/mã bưu chính có thể bao gồm chữ cái và/hoặc số.

Đây là những gì tôi đã cố gắng:

print_r(preg_match('/^([0-9]+)\s([a-z]+)\s([a-z]+)\s([a-z]+)\s([a-z0-9]+)$/i', $t, $m)); 
print_r($m); 

nó ra:

Array 
(
    [0] => 123 asd asd asd 123 
    [1] => 123 
    [2] => street 
    [3] => city 
    [4] => state 
    [5] => zip 
) 

này làm việc bằng không gian mà thôi. Khi tôi có một dấu phẩy nó không hoạt động và nó dẫn đến một mảng trống.

Tôi có thể làm gì để bao gồm dấu phẩy?

+0

Nó sẽ không hoạt động với '#' trong đó. Bạn có thể chính xác hơn một chút về những gì đầu vào bạn mong đợi, ngoài các mẫu ở trên? – fge

Trả lời

15

Tại sao không chỉ xóa dấu phẩy và sau đó sử dụng cụm từ thông dụng của bạn?

Đồng thời đối với zip chữ số, bạn có thể cần thêm các ký tự khác ngoài a-z0-9 vì mã zip của Canada sử dụng dung lượng.

Một điều khác bạn sẽ cần phải kiểm tra là nếu một con đường đã khoảng trống trong nó thích:

1000 NW One Way Ổ

HOẶC

100 Rue Des Peupliers

Cụm từ thông dụng của bạn sẽ không hoạt động. Tương tự cho thành phố.

Sử dụng API là tốt nhưng bạn phải nhận API cho các quốc gia bạn cần. Nếu bạn muốn xác nhận tất cả các quốc gia có thể gây đau đớn.

ceejayoz có câu trả lời hay, nhưng điều tôi nghĩ bạn nên làm là lấy API cho các quốc gia hàng đầu bạn nhận được và sau đó sử dụng regex cho mọi thứ khác.

-1

[0-9]+\s(\w)*(\W)(\s?)(\w)*(\W)(#[0-9])?(\W*)(\w)*(\W)(\s?)(\w)*(\s?)(\w)*

thử

+4

tôi nhận được: PHP Cảnh báo: preg_match(): Công cụ sửa đổi không xác định '+' – Marty

1
/^([0-9]+)\s([a-z]+)(,\s|\s)([a-z]+)(,\s|\s)([a-z]+)(,\s|\s)([a-z0-9]+)$/i 

Chỉ cần thay đổi này "\ s" thành "(, \ s | \ s)", mà sẽ phù hợp hoặc là một khoảng trắng hoặc dấu phẩy và một whtiespace. Tuy nhiên có rất nhiều vấn đề với biểu hiện của bạn bên cạnh những gì fge đề cập. Hãy nghĩ về tên đường phố hoặc thành phố có dấu cách hoặc dấu gạch ngang, ví dụ ...

0

Dịch vụ bưu điện của Hoa Kỳ có API bình thường - https://www.usps.com/business/webtools.htm.

Thực hiện điều này thông qua regex sẽ là một quá trình đau đớn, quá trục trặc. Nhiều địa chỉ không dính vào định dạng thông thường.

+2

sẽ tốt cho Hoa Kỳ, Canda là gì? Anh? – aki

+0

Tôi nghĩ OP chỉ đề cập đến các địa chỉ kiểu Mỹ, nhưng tôi thấy anh ta chỉ định rằng "zip" có thể chứa các chữ cái, mà tôi cho rằng nó là mã bưu chính nhiều hơn một mã zip. Tuy nhiên, điều này cũng có thể giúp với một phần tốt của địa chỉ của mình. – ceejayoz

+0

xin lỗi tôi không thấy "chỉ các địa chỉ kiểu Mỹ" trong mã " – aki

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