定制过滤器区分大小写

时间:2017-05-09 10:14:28

标签: angular angular-pipe

我已经创建了自定义管道来过滤数据库中的数据

有管道

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {

  transform(aliases: any, term: any): any {
    // check if search term is undefined
    if (term === undefined) return aliases;
    // return updated array
    return aliases.filter(function(alias){
      return alias.local_part.includes(term) || alias.domain.includes(term);
    });
  }

}

并且有我的搜索输入

<form id="filter">
            <div class="input-group custom-search-form">
                <input type="text" placeholder="Search" class="form-control" [(ngModel)]="term" name="filter">
                <span class="input-group-btn">
          <button class="btn btn-primary" type="button">
          <i class="fa fa-search"></i>
                </button>
                </span>
            </div>
        </form>

它工作正常,但我的数据库记录如aaa,Abb,AbbB,cCc。

当我在搜索输入中输入内容时,它只返回小写或更高的元素。

例如:搜索 - &gt; AAA 返回aaa而不是AaA和Aaa

我应该如何改变它来实现它?

2 个答案:

答案 0 :(得分:1)

在服务器端逻辑中,当您搜索/比较它们时,将两个术语转换为小写或大写。例如,如果您的服务器端语言是PHP,则使用strtolower();

如果您的数据库中有AaA的数据,那就是问题。我在您的搜索框aaa中写道:

  • 我应该得到数据AaA
  • 没有任何逻辑可以随机将aaa转换为AaA

所以我们只需将所有内容都转为aaaAAA

在PHP示例之后,我们可以执行以下操作:

if (strtolower($_POST['search_data']) == strtolower($db_data) {
    // do something
}

更新1:

或多或少,使用您的代码,可以这样做:

<?php
include ('db.php');

$sql = "SELECT * FROM aliases";

$result = $conn->query($sql);
if($result->num_rows > 0){
  $data = array();
  while($row = $result->fetch_assoc()) {
    if (strtolower($_POST['search_data']) == strtolower($row['searched_field']) 
    {
       $data[] = $row;
    }

  }
  echo json_encode($data);
} else {
  echo "0";
}
$conn->close();
 ?>

在这种情况下,我们仅向$data添加与搜索值匹配的数据。我假设搜索字段的名称为search_data,并且表中的列名为searched_field

答案 1 :(得分:1)

按照下面的说明更改管道

private transform(aliases: any, term: any): any {
        let filter;
        let newValue;
        // check if search term is undefined
        if (term === undefined) {
            return aliases;
        } else if (term) {
            filter = term.toLocaleLowerCase();
        }

        if (filter && aliases) {
            newValue = aliases.filter((alias) => alias.local_part.toLocaleLowerCase().indexOf(filter) !== -1 || alias.domain.toLocaleLowerCase().indexOf(filter) !== -1);
        } else {
            newValue = aliases;
        }
        // return updated array
        return newValue;
    }