2012-01-20 33 views
7
$check = 'this is a string 111'; 
if ($check = 'this is a string') { 
echo 'perfect match'; 
} else { 
echo 'it did not match up'; 
} 

Nhưng nó trả về kết quả phù hợp mọi lúc thay vì nó không khớp ... Tôi dường như không nhận được chuỗi khớp với trường hợp chính xác nó sẽ chỉ hoạt động nếu một phần của chuỗi khớp lên.PHP Khớp một chuỗi chính xác

Nếu tôi cố gắng làm phức tạp mọi thứ một chút bằng cách sử dụng mã bảng và các mẫu regex, nó sẽ trở thành một cơn ác mộng.

if ($check = '/\[quote(.*?)\](.*?)\[\/quote\]/su') { 
$spam['spam'] = true; 
$spam['error'] .= 'Spam post quote.<br />'; 
} 

Vì vậy, nếu bài đăng chỉ chứa thẻ trích dẫn, nó sẽ bị coi là spam và bị bỏ qua nhưng dường như tôi không thể giải quyết được.

+0

dễ dàng lên downvoter! –

+0

+1 bởi vì đó là kết quả rất thực tế/sự sụt giảm của một ngôn ngữ cho phép bạn trả lại giá trị từ một bài tập. – Joe

+0

@RobAgar this _really_ đang gỡ lỗi 101. Các ưu đãi dành cho, bạn có thể thấy khi di chuột qua nút upvote, "các câu hỏi hữu ích cho thấy nỗ lực nghiên cứu". Cả hai đều không áp dụng ở đây. – CodeCaster

Trả lời

2

Bạn đang sử dụng toán tử gán, =, thay vì toán tử bình đẳng ==.

Bạn cần phải sử dụng

if ($check == 'this is a string') { 
2

if ($check = 'this is a string') gán chuỗi để $check biến mà luôn luôn được xác định và do đó, trả luôn luôn đúng trong nếu

nên if ($check == 'this is a string')

+0

'luôn luôn được xác định và do đó, trả về luôn đúng' - không hoàn toàn đúng. Nếu bạn làm 'if ($ check = 0)' nó sẽ đánh giá sai. Điều thực sự sẽ xảy ra ở đây là PHP sẽ đánh giá bên phải của biểu thức là boolean. – DaveRandom

+0

chính xác, nhưng miễn là bạn chỉ định một chuỗi không trống, nó sẽ đánh giá một tương đương thực sự. – dweeves

+0

... trừ khi chuỗi là ''0'' – DaveRandom

10

Bạn cần phải sử dụng == không chỉ =

$check = 'this is a string 111'; 
if ($check == 'this is a string') { 
echo 'perfect match'; 
} else { 
echo 'it did not match up'; 
} 

= sẽ chỉ định biến.

== sẽ làm một so sánh lỏng

=== sẽ làm một so sánh nghiêm ngặt

Xem comparison operators để biết thêm thông tin.

+1

Nếu bạn thực sự muốn chính xác, hãy sử dụng so sánh nghiêm ngặt (' === ') toán tử, nếu không sau đây là đúng:' if ('123' == 123) ' –

+0

Cảm ơn nó đã làm việc cho chuỗi cơ bản của tôi nhưng không phải khi tôi bắt đầu làm phức tạp mọi thứ với các mẫu regex – C0nw0nk

+0

Vâng, so sánh chuỗi sẽ không hoạt động bằng cách sử dụng regex ... cho rằng bạn cần phải làm một preg_match - http://php.net/manual/en/function.preg-match.php – Nick

3

Để so sánh bình đẳng, bạn muốn toán tử ==. = là bài tập.

if ($check = 'this is a string') { 

nên

if ($check == 'this is a string') { 

Đừng lo lắng, tất cả chúng ta thực hiện nó. Tôi vẫn làm :)

2

toán tử so sánh == sẽ hoạt động trong hầu hết các trường hợp, nhưng không thực hiện khớp chính xác trong một số trường hợp cạnh *.

Sử dụng toán tử === tốt nhất.

if ($check === 'this is a string') { 

Một ví dụ nơi == làm việc bất ngờ

$check = '2'; 
if ($check == '   2') { 
Các vấn đề liên quan