2012-03-31 38 views
14

Tôi rất tiếc khi đặt câu hỏi nhưng tôi vô dụng khi nói đến việc hiểu mã regex.ereg/eregi thay thế cho PHP 5.3

Trong một module php mà tôi đã không viết là chức năng sau

function isURL($url = NULL) { 
    if($url==NULL) return false; 

    $protocol = '(http://|https://)'; 
    $allowed = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; 

    $regex = "^". $protocol . // must include the protocol 
        '(' . $allowed . '{1,63}\.)+'. // 1 or several sub domains with a max of 63 chars 
        '[a-z]' . '{2,6}'; // followed by a TLD 
    if(eregi($regex, $url)==true) return true; 
    else return false; 
} 

một số loại linh hồn có thể cho tôi mã thay thế cho rằng với bất cứ điều gì là cần thiết để thay thế eregi

+0

mục đích thay thế nó là gì? –

+3

@William, các chức năng như 'ereg',' eregi', 'split', v.v. không được chấp nhận (không chỉ bị phản đối, mà còn bị xóa hoàn toàn) kể từ PHP 5.3. [Đọc thêm] (http://www.php.net/manual/en/reference.pcre.pattern.posix.php). – TMS

+0

Thay thế hoàn toàn? http://stackoverflow.com/questions/9954064/ereg-eregi-replacement/9954148#9954148 –

Trả lời

39

Tốt câu hỏi - đây là cần thiết khi bạn nâng cấp lên PHP 5.3, nơi eregeregi chức năng đang bị phản đối. Để thay thế

eregi('pattern', $string, $matches) 

sử dụng

preg_match('/pattern/i', $string, $matches) 

(các dấu i trong đối số đầu tiên có nghĩa IgnoreCase và tương ứng với i trong eregi - chỉ cần bỏ qua trong trường hợp thay thế ereg cuộc gọi).

Nhưng hãy lưu ý sự khác biệt giữa các mẫu mới và cũ! This page liệt kê các khác biệt chính, nhưng đối với các cụm từ thông dụng phức tạp hơn, bạn phải xem chi tiết hơn ở các khác biệt giữa POSIX regex (được hỗ trợ bởi các chức năng cũ/eregi/chia vv) và PCRE.

Nhưng trong ví dụ của bạn, bạn chỉ là an toàn để thay thế các cuộc gọi eregi với:

if (preg_match("%{$regex}%i", $url)) 
    return true; 

(lưu ý: % là một dấu phân cách; thường giảm / được sử dụng Bạn có một trong hai để đảm bảo rằng các dấu phân cách. Trong ví dụ của bạn slashes là một phần của regex $ vì vậy nó là thuận tiện hơn để sử dụng ký tự khác nhau như delimiter.)

+1

cảm ơn rất nhiều Tomas bạn là một ngôi sao. – Colin

+0

xin lỗi Tomas giải pháp của bạn cho lỗi preg_match() [function.preg-match]: Công cụ sửa đổi không xác định 'h' là do i sau} – Colin

+0

@Colin, ok, tôi hiểu! Điều này là do dấu phân tách '|' được sử dụng trong $ regex cũng ... vì vậy chúng tôi phải sử dụng dấu phân tách khác nhau, không có trong regex $, ví dụ: '%' (hy vọng tôi đã không bỏ qua một cái gì đó một lần nữa :-)). Đã cập nhật câu trả lời của tôi. – TMS

0

eregi là khấu hao trong PHP bạn phải sử dụng preg_match

function isValidURL($url) 
{ 
    return preg_match('%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i', $url); 
} 


if(isValidURL("http://google.com")) 
{ 
    echo "Good URL" ; 
} 
else 
{ 
    echo "Bad Url" ; 
} 

Xin xem http://php.net/manual/en/function.preg-match.php để biết thêm thông tin Cảm ơn

:)

+0

Regex thay thế của bạn không áp dụng cùng một quy tắc – meouw

+0

hey xuống cử tri .. bạn có quan tâm để đưa ra lý do tại sao tôi đã xuống tiếng nói ??? – Baba

+0

@meouw ... quy tắc là xác minh địa chỉ email hợp lệ ... tôi thiếu bất kỳ thứ gì – Baba

1

Bạn có muốn thay thế hoàn toàn để preg_match và eregi?

if(!filter_var($URI, FILTER_VALIDATE_URL)) 
{ 
return false; 
} else { 
return true; 
} 

Hoặc cho Email:

if(!filter_var($EMAIL, FILTER_VALIDATE_EMAIL)) 
{ 
return false; 
} else { 
return true; 
} 
5

sóc giảm nhẹ PHP 5.3 cho đến khi bạn thay thế tất cả các chức năng phản

if(!function_exists('ereg'))   { function ereg($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/', $subject, $matches); } } 
if(!function_exists('eregi'))   { function eregi($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/i', $subject, $matches); } } 
if(!function_exists('ereg_replace')) { function ereg_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/', $replacement, $string); } } 
if(!function_exists('eregi_replace')) { function eregi_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/i', $replacement, $string); } } 
if(!function_exists('split'))   { function split($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/', $subject, $limit); } } 
if(!function_exists('spliti'))   { function spliti($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/i', $subject, $limit); } } 
Các vấn đề liên quan