验证url数组?

时间:2012-09-06 04:30:42

标签: php arrays

我正在编写一个小脚本,用户将url添加到textarea,我发现这个小函数来验证单个链接:

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

但我需要它来验证一系列链接

我使用explode来分隔每个人:

$urls = explode("\n", $_POST['urls']);

我知道我需要使用foreach循环网址数组,但如何在$var

中获取foreach elseif

示例:

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

$urls = array('http://iamvalid.com','iamnotvalid.com','http://iamvalidaswell.com');

foreach ($urls as $check) {
 $validate = isValidURL($check);
}

if($check != $validate) {
//  If fail
 $result = 'fail';
} else {
//  If pass
 $result = 'pass';
}  // if

echo $result;

(用于演示目的的数组而不是expode)

更新 Deepaks回答很好,但与我的mysql注入预防功能冲突

冲突功能:

function sanitizeSQL($input) {
 if(get_magic_quotes_gpc() == true){
   $input = stripslashes($input);
  }
   return mysql_real_escape_string(htmlspecialchars($input));
}

3 个答案:

答案 0 :(得分:1)

使用你的示例代码(数组而不是爆炸)我建议像

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

$urls = array('http://iamvalid.com','iamnotvalid.com','http://iamvalidaswell.com');

$result = 'pass';
foreach ($urls as $check) {
  if(!isValidURL($check)) {
    $result = 'fail';
    break;
  }
}

echo $result;

答案 1 :(得分:1)

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

function sanitizeSQL($input) {
   if(get_magic_quotes_gpc() == true){
      $input = stripslashes($input);
   }
   return mysql_real_escape_string(htmlspecialchars($input));
}

$urls = explode("\n", $_POST['urls']);

$errorcount = 0;
foreach($urls as $url) {
   // next line fixes conflict by cleaning here rather then before
   $url = sanitizeSQL($url);
   $result = isValidURL(trim($url));
   // Do something with ur result
   if(!$result) $errorcount++;

}
if($errorcount>0){
  //Failed
} else {
  //Passed
}

注意

尽量避免mysql_*函数使用mysqli_*PDO

答案 2 :(得分:0)

或者可能有点短......?

$urls = array_map('trim', explode("\n", $string));
$validUrls = array_filter(filter_var_array($urls, FILTER_VALIDATE_URL));