2013-07-30 145 views
3

哪能inlude使用拉丁字符像ČčĆ抚Đđ在此javascript正则表达式拉丁字符

var regex = new RegExp('\\b' + this.value, "i"); 

UPDATE:

我有过滤复选框标签的代码,但它不工作得很好当有与C C C的输入

function listFilter(list, input) { 
    var $lbs = list.find('.css-label'); 

    function filter(){ 
     var regex = new RegExp('\\b' + this.value); 
     var $els = $lbs.filter(function(){ 
      return regex.test($(this).text()); 
     }); 
     $lbs.not($els).hide().prev().hide(); 
     $els.show().prev().show(); 
    }; 

    input.keyup(filter).change(filter) 
} 

jQuery(function($){ 
    listFilter($('#list'), $('.search-filter')) 
}) 

这里是一个小提琴:DEMO

+0

你能不能给我们的运行的代码按预期方式不起作用的例子吗? – loganfsmyth

+1

这是一个复制? http://stackoverflow.com/questions/7258375/latin-charcters-included-in-javascript-regex另外检查从该问题中的意见之一的链接:http://stackoverflow.com/questions/280712/javascript- unicode – Gray

+0

@loganfsmyth可能像'new RegExp('\\ b'+'ČčĆ抚Đđ',“i”)。test('ČčĆ抚Đđ')'返回false。 –

回答

4

您的正则表达式中的问题是,字边界不能正确检测到这些字符(就像\w\W在Unicode方面处理得不好)。

我建议先从

new RegExp('(^|[\\s\\.])ČčĆ抚Đđ', "i") 

,并添加到您[\\s\\.]可能需要为字边界其它字符。

如果您无法定义预期可能的单词边界,则最好使用库来生成“Unicode兼容”正则表达式。有些被列在this related question

+1

如果你用这种方式调用它,你需要避免使用反斜杠,但实际上,文字更短,所以我最好使用:'/(^ | [\ s \。])ČčĆ抚Đđ/ i'。 – 2013-07-30 16:11:17

+0

@wvxvw谢谢(和+1)。我忘记了字符串逃脱。我认为OP有一个动态提供的字符串包含在正则表达式中,这就是为什么我没有使用文字。 –

+0

@ user2406735我不确定“大多数”正则表达式引擎的Unicode支持能力很差,但Javascript肯定会在那里获得*最差显示*奖。去那里,Java,Perl,Python和Ruby在这方面做得更好 - 在某些情况下,更好。对于Javascript,你应该安装[XRegExp Unicode插件](http://xregexp.com/plugins/#unicode),这将有所帮助。 – tchrist

2

尝试:

/^[A-z\u00C0-\u00ff\s'\.,-\/#!$%\^&\*;:{}=\-_`~()]+$/ 

为正则表达式。

看下面的例子:

var regexp = /[A-z\u00C0-\u00ff]+/g, 
    ascii = ' hello [email protected]#$%^&*())_+=', 
    latin = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏàáâãäåæçèéêëìíîïÐÑÒÓÔÕÖØÙÚÛÜÝÞßðñòóôõöøùúûüýþÿ', 
    chinese = ' 你 好 '; 

console.log(regexp.test(ascii)); // true 
console.log(regexp.test(latin)); // true 
console.log(regexp.test(chinese)); // false 

为Glist:https://gist.github.com/germanattanasio/84cd25395688b7935182