首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React选择搜索输入-Turkish小写字母"i“字符无法获得以"İ”开头的结果(单词)

React选择搜索输入-Turkish小写字母"i“字符无法获得以"İ”开头的结果(单词)
EN

Stack Overflow用户
提问于 2019-09-01 20:40:33
回答 3查看 1.5K关注 0票数 3

在我的应用程序中,我使用react-select组件来选择城市功能。组件呈现土耳其城市。因此,一些城市的名字以土耳其字母"İ-i“开头。每件事都是有效的,问题是,当我输入小写"i“时,我无法得到以"İ”开头的城市名,比如İzmir,İstanbul。

这是我的部件

代码语言:javascript
复制
import Select from 'react-select';
import {
  FormGroup,
  Input,
  Label,
  Col,
} from 'reactstrap';

<FormGroup row>
  <Col xs="12" md="9">
    <Label htmlFor="text-input">{t('RESTAURANT_DETAILS.GENERAL_INFO.CITY')}</Label>
    <Select
      placeholder={i18n.t('CHOOSE_CITY')}
      isDisabled={!this.state.editable || accountingLoading}
      options={this.state.cities.map(city => ({
        value: city.code,
        label: city.city,
      }))}
      value={this.state.city}
      onChange={val => this.onCitySelected(val)}
    />
  </Col>
</FormGroup>

因此,为了得到那些城市,我应该准确地键入大写"İ“。有什么办法解决这个问题吗?我被这个讨厌的虫子困住了。

这是案件的截图。

https://cdn1.imggmi.com/uploads/2019/9/1/fa7b5ca6e264501abb395b4ac38c753d-full.png

https://cdn1.imggmi.com/uploads/2019/9/1/4c6f5c8e1c891a3d2ae8ee38dbfadb79-full.png

https://cdn1.imggmi.com/uploads/2019/9/1/0c3ae965754e60a015ea048ddd081f51-full.png

https://cdn1.imggmi.com/uploads/2019/9/1/7ee3c8187ea4830386ff45cbd40ee126-full.png

--更新--,我把它解决了,伙计们。

我把它加在下面作为回答。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-01 21:25:20

如果您希望拉丁字符i也表示土耳其字符İ,则需要将您的İ中的土耳其字符替换为拉丁字符(因为我确信您希望以这种方式显示这些字符),或者提供一个自定义筛选函数来响应选择,以支持该字符的二元性。

代码语言:javascript
复制
filterOption={this.customFilter}

下面是替换字符串中土耳其字符的示例

.replace(/İ/gim, "i")

下面是一个自定义过滤器的示例。

代码语言:javascript
复制
customFilter = (option, searchText) => {
   if (
     option.data.label.includes(searchText.toLowerCase())
   ) {
     return true;
   } else {
     return false;
   }

}
票数 5
EN

Stack Overflow用户

发布于 2020-09-19 09:32:41

我找到了解决办法。给你,带着雷吉斯。现在效果很好。

代码语言:javascript
复制
export const turkishCharacterRegex = keyword => keyword
  .replace(/[ıİiI]/g, '[ıİiI]')
  .replace(/[şŞsS]/g, '[şŞsS]')
  .replace(/[çÇcC]/g, '[çÇcC]')
  .replace(/[ğĞgG]/g, '[ğĞgG]')
  .replace(/[öÖoO]/g, '[öÖoO]')
  .replace(/[üÜuU]/g, '[üÜuU]');


 const customFilter = (option, searchText) =>((turkishCharacterRegex(option.data.label)).toLowerCase().includes(turkishCharacterRegex(searchText).toLowerCase()));

    <Select
      -----
      -----
      -----
      filterOption={customFilter}
    />
票数 1
EN

Stack Overflow用户

发布于 2021-10-22 12:00:50

我也有同样的问题,我的解决方案是使用toLocaleLowerCase方法。这可能比雷克斯更容易理解。

代码语言:javascript
复制
<Select
  ...

  filterOption={(option, query) =>
    String(option.data.label)
      .toLocaleLowerCase('tr')
      .includes(query.toLocaleLowerCase('tr'))
  }

  ...
/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57749366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档