2012-06-12 32 views
11

Tôi đang thực hành kỹ năng php mới bắt đầu của mình và muốn biết tại sao tập lệnh này luôn trả về FALSE?filter_var sử dụng FILTER_VALIDATE_REGEXP

Tôi đang làm gì sai?

$namefields = '/[a-zA-Z\s]/'; 

$value = 'john'; 

if (!filter_var($value,FILTER_VALIDATE_REGEXP,$namefields)){ 
    $message = 'wrong'; 
    echo $message; 
}else{ 
    $message = 'correct'; 
    echo $message; 
} 
+0

Khi tôi sử dụng preg_match() thay vào đó nó hoạt động tốt ... – Iris

+0

preg_match() sẽ yêu cầu bạn sử dụng bộ lọc gọi lại. Nếu bạn muốn sử dụng cơ chế bộ lọc PHP (hoạt động hơi khác một chút so với sử dụng superglobals), chỉ cần tạo một mảng kết hợp như trong các ví dụ thủ công. –

Trả lời

18

Khi tôi nhớ lại, regexp phải nằm trong một mảng tùy chọn.

$ string = "Khớp chuỗi này";

var_dump(
    filter_var(
     $string, 
     FILTER_VALIDATE_REGEXP, 
     array(
      "options" => array("regexp"=>"/^M(.*)/") 
     ) 
    ) 
); // <-- look here 

Ngoài ra,

$namefields = '/[a-zA-Z\s]/'; 

shoud được thay

$namefields = '/[a-zA-Z\s]*/'; // alpha, space or empty string 

hoặc

$namefields = '/[a-zA-Z\s]+/'; // alpha or spaces, at least 1 char 

bởi vì với phiên bản đầu tiên tôi nghĩ rằng bạn phù hợp với chỉ duy nhất nhân vật chuỗi

+1

Thật sao? Đó không phải là rất rõ ràng từ các tài liệu hướng dẫn trong php: -/ Cảm ơn cũng cho lời khuyên regex :) Tôi sẽ fiddle xung quanh với điều này một chút. – Iris

+0

Đối với các cụm từ thông dụng nói chung và trong PHP, bạn có thể xem: http://www.regular-expressions.info/tutorial.html và http://www.regular-expressions.info/php. html trang web này đã giúp tôi rất nhiều. – Cranio

+0

Cảm ơn! và mã hoạt động ngay sau khi thêm mảng. – Iris

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