2012-04-20 38 views
6

Tôi cần kiểm tra xem chuỗi có chứa bất kỳ ký tự nào không phải là | hay không, để gán các biến đó không có gì ngoại trừ | giá trị NULL (có thể về mặt lý thuyết) bất kỳ số nào của | ký tự nhưng có thể sẽ không nhiều hơn 5-6). Giống như ||||Cách kiểm tra xem chuỗi có chứa chỉ các ký tự cụ thể

Tôi có thể thấy lặp qua từng ký tự của chuỗi hoặc somesuch, nhưng tôi cảm thấy phải có một cách đơn giản hơn.

+1

Bạn có thể đưa ra ví dụ về chuỗi mà bạn đang thao tác không? – jprofitt

Trả lời

13
if (preg_match('/[^|]/', $string)) { 
    // string contains characters other than | 
} 

hay:

if (strlen(str_replace('|', '', $string)) > 0) { 
    // string contains characters other than | 
} 
+4

oooh điều này cho phép tôi tiếp tục không biết regex! : p – Damon

+0

Giải pháp đầu tiên không thành công trên "\ n |" bởi vì các regex mặc định không vượt qua nhiều dòng – giorgiosironi

2

Có, bạn có thể sử dụng biểu thức thông thường:

if(! preg_match('/[^\|]/', $string)) { 
    $string = NULL; 
} 
0

cách nhanh nhất và đơn giản nhất có lẽ là stripos chức năng. Nó trả về vị trí của một chuỗi bên trong một, hoặc false nếu nó không thể được tìm thấy:

if (false === stripos($string, '|')) { 
    $string = null; 
} 

Các false === là cần thiết cho nghiêm ngặt kiểu so sánh, vì stripos có thể trở lại một số không chỉ ra rằng | là trên char đầu tiên.

Bạn có thể sử dụng công cụ xác thực tinh vi hơn giúp việc đọc dễ dàng hơn. Tôi khuyên bạn nên Respect\Validation. Mẫu sử dụng:

if (v::not(v::contains('|'))->validate($string)) { 
    $string = null; 
} 
+1

* Không chứa * không giống với * chứa bất kỳ thứ gì bên cạnh * ... – deceze

1

Tôi muốn kiểm tra xem chuỗi có chứa một số ký tự nhất định hay không. Để ngăn chặn phủ tăng gấp đôi (vì tôi thấy họ khó khăn hơn te đọc) Tôi quyết định sử dụng regex sau:

preg_match('/^[|]+$/', $string) 

này kiểm tra một chuỗi từ đầu đến cuối để chỉ chứa | ký tự (ít nhất một).

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