我使用以下内容来插入CSV文件,并根据搜索帐号显示该帐号的信息。这样做很好但是自动生成的CSV文件在帐号中包含连字符,但是我们的客户从来没有看到这个,也不会知道该号码中的连字符。
是否可以完成相同的搜索功能但排除任何特殊字符?
<?php $acctno = isset($_GET['acctno']) ? $_GET['acctno'] : null;
$notices = null;
if ($acctno) {
if ($file = fopen(''.BASE_URL.'/data/ParcelNotices.csv', 'r')) {
while (($data = fgetcsv($file)) !== false) {
if ($data[0] === $acctno) {
$notices = $data[2];
break;
}
}
}
}?>
我的CSv账号如下:00100659-05
如果他们搜索00100659-05它完美无缺,我需要他们能够输入0010065905并获得积极的结果。
非常感谢任何帮助。
答案 0 :(得分:0)
您可以修改此部分:
if($data[0] === $acctno){
$notices = $data[2];
break;
}
对此:
if($data[0] === $acctno || Str_Replace('-','',$data[0])===$acctno)){
$notices = $data[2];
break;
}
我相信在搜索时会忽略连字符。但是,如果您有很多请求,那么删除所有破折号后创建CSV的第二个副本可能要好得多,以缩短搜索时间。
Edit1:要排除任何非字母数字字符,您可以使用Preg_Replace,如下所示:
if($data[0] === $acctno || Preg_Replace('@[^a-zA-Z0-9]@','',$data[0])===$acctno)){
$notices = $data[2];
break;
}
Edit2:清理:
<?php
//
$acctno_requested = isset($_GET['acctno']) ? $_GET['acctno'] : null;
//
$notices = null;
if ($acctno_requested) {
if ($file = fopen(''.BASE_URL.'/data/ParcelNotices.csv', 'r')) {
while (($data = fgetcsv($file)) !== false) {
//
$accountno_file=$data[0];
$accountno_file_clean=Preg_Replace('@[^a-zA-Z0-9]@','',$accountno_file);
//
if ($accountno_file_clean === $acctno_requested) {
$notices = $data[2];
break;
}
}
}
}
?>