自定义过滤器区分大小写

Custom filter case sensitive

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

有管道

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 这样的记录。

当我在搜索输入中输入内容时,return 只有小写或大写的元素。

例如:搜索 -> aaa return aaa 但不是 AaA 和 Aaa

我应该如何修改才能实现?

在服务器端逻辑中,当您 searching/comparing 他们时,将两个术语都变成小写或大写。例如,如果您的服务器端语言是 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,而 table 中的列名为 searched_field.

如下所示更改您的管道

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;
    }