自定义过滤器区分大小写
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
所以我们只需将所有内容都变成 aaa
或 AAA
。
按照 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;
}
我创建了自定义管道来从数据库中过滤我的数据
有管道
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
所以我们只需将所有内容都变成 aaa
或 AAA
。
按照 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;
}