逃避不同语言的特殊字符

时间:2012-04-02 13:20:04

标签: javascript regex

我使用以下正则表达式来转义特殊字符:

var searchForTest = text.replace(/[^a-zA-Z 0-9.]/gi,'.');

当文本是英文时,这可以正常工作,但是当我尝试高亮希腊字符时它会失败,因为它们被识别为特殊字符。

工作样本示例:English Characters

非工作样本Greek Characters

的示例

由于

2 个答案:

答案 0 :(得分:2)

当你处理希腊符号时,你应该使用unicode序列 由于希腊符号are in range \u0374 - \u03FF只是将此范围添加到正则表达式

var searchForTest = text.replace(/[^a-zA-Z 0-9.\u0374-\u03FF]/gi,'.');

答案 1 :(得分:0)

JavaScript正则表达式对Unicode没有任何真正的了解;也就是说,没有类似“字母”或“数字”的Unicode识别字符类(只有“ASCII字母数字字符”),没有办法引用Unicode属性等等。所以你基本上有两个选择:

  • 匹配任何不在您的特殊子集中的ASCII字符:

    var searchForTest = text.replace(/(?=[\x20-\x7E])[^a-zA-Z 0-9.]/gi,'.');
    

    (这有缺点,它不会识别卷曲引号,希腊语特定的标点符号等,作为特殊字符。)

  • 匹配任何不在您特殊子集中的字符,并根据需要添加希腊字符和其他字符:

    var searchForTest = text.replace(/[^a-zA-Z 0-9.α-ωΑ-Ω]/gi,'.');
    

    (这方面的缺点很明显。)

你可以尝试将上述内容结合起来进行混合方法,但你永远不会完美。 : - /