Javascript正则表达式不敏感土耳其字符问题

时间:2014-05-30 23:47:20

标签: javascript regex unicode case-sensitive turkish

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

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

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

例如: 如果

filterWord = istanbul 

content = "İstanbul";

上面的代码不能正常工作,如果我把伊斯坦布尔写到伊斯坦布尔,它正在工作,但这次它不是不敏感的,我怎么能解决这个问题呢?

3 个答案:

答案 0 :(得分:3)

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

例如:英语

English

同样,我们有

Turkish

以上是一些具有相同颜色的突出显示的字符是它们自己的大小写表示,并且它们的十六进制代码中只有一个区别Ê Hex-Code 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 ["Ý"]

如果您使用正确的字符,那么它应该正常工作。 我对拉丁文 - 土耳其文字的了解不多。

答案 1 :(得分:2)

这是 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

答案 2 :(得分:1)

你可以在括号中表达大小写和/或大写

/ [II] stanbul / I

你可以从here

看到