【问题标题】:Javascript regex insensitive turkish character issueJavascript正则表达式不敏感的土耳其字符问题
【发布时间】:2014-05-30 23:47:19
【问题描述】:

我正在使用正则表达式来过滤一些内容。

var word = new RegExp(filterWord,"gi");// "gi" means Global and insensitive
content = content.replace(word, "");//removes "word" from content

此代码可以正常工作,但是当正则表达式获取大写“İ”时,它不会替换单词。

例如: 如果

filterWord = istanbul 

和

content = "İstanbul";

上面的代码不能正常工作,如果我把 istanbul 写到 İstanbul,它可以工作,但这次它不是不敏感的,我该如何解决这个问题?

【问题讨论】:

    标签: javascript regex unicode case-sensitive turkish


    【解决方案1】:

    可以用括号表示大小写

    /[İi]stanbul/i

    你可以从here看到

    【讨论】:

      【解决方案2】:

      regEx 如何与 小写和大写 字符一起使用基于字符的十六进制代码以及它们在该 Unicode 的 Unicode 联盟中的表示方式设置(任何语言,我希望 Unicode 都基于国际标准)。

      例如:英语

      同样,我们有

      上面是一些相同颜色的突出显示的字符是它们自己的大写和小写表示,它们的十六进制代码只有一个区别。 Ê 十六进制代码是 00CA 和 ê 是 00EA 有一个差异 C 和 E 在第三位。

      同样适用于 Ý 和 ý 十六进制代码是 00DD 和 u00FD 有一个区别 D 和 F

      现在检查一下,例如:

      'ÊÌÝêìý'.match(/Ì/gi) //case insensitive
      //output ["Ì", "ì"]
      'ÊÌÝêìý'.match(/Ì/g) //case sensitive
      //output ["Ì"]
      
      'ÊÌÝêìý'.match(/Ý/ig) //case insensitive
      //output ["Ý", "ý"]
      'ÊÌÝêìý'.match(/Ý/g) //case sensitive
      //output ["Ý"]
      

      如果您使用正确的字符,那么它应该可以正常工作。 我不太了解拉丁土耳其语字符。

      【讨论】:

      • 它对字符十六进制代码的解释非常好,我认为 "i" 和 "İ" 与 Ì 和 ì 不相似,不幸的是土耳其语有点不同
      【解决方案3】:

      这是 Unicode 字符的主题。

      发生的情况是,您的示例中的 i 不是单个字母而是 2,因为波浪号也算作一个字符。这带来了许多复杂性和需要遵循的规则才能满足 Unicode 规则。

      您可以执行以下操作:([\x{0049}-\x{0130}]) 以满足您的i 需求,但此表达式可能会有所不同,具体取决于您是否要在 .net、java、javascript 或 php 上使用此表达式。

      *Online Demo*

      您还可以在这里查看每个字符代表的代码:

      http://www.fileformat.info/info/unicode/char/search.htm?q=%C4%B0&preview=entity

      【讨论】:

        猜你喜欢
        • 2014-02-26
        • 2019-08-01
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多