RegEx:检查代码点0x7f上方的至少一个(unicode)字符

时间:2013-12-03 01:56:01

标签: regex actionscript-3 unicode ascii non-ascii-characters

我正在尝试测试字符串是否包含代码点0x7f上方的至少一个(unicode)字符(即非ascii字符)。

我尝试了以下想法(以及其他一些想法),但它们似乎不起作用:

var rx:RegExp;

rx = /[^\\x00-\\x7f]/; // negate ascii code point 0 to 127
trace( rx.test( '\u0080' ) ); // true (expected true)
trace( rx.test( 'b' ) ); // true (expected false)

rx = /[^\u0000-\u007f]/; // negate unicode code point 0 to 127
trace( rx.test( '\u0080' ) ); // false (expected true)
trace( rx.test( 'b' ) ); // false (expected false)

有人可以帮助我理解为什么这不能正常工作以及如何正确地完成它?

2 个答案:

答案 0 :(得分:1)

/[^\\x00-\\x7f]/;

双反斜杠表示字面反斜杠,因此您正在寻找一个排除反斜杠的字符组,x00和反斜杠之间的所有字符,{{ 1}},x7

如果正则表达式是字符串文字(如f),则只能使用双反斜杠;几乎所有正则表达式文字语法new RegExp('[^\\x00-\\x7F]')的目的是允许你输入反斜杠表达式,而不需要额外的转义层。

/.../

然而:

'foo'.search(/[^\x00-\x7F]/)!==-1  // false
'bär'.search(/[^\x00-\x7F]/)!==-1  // true
浏览器JavaScript中的

rx = /[^\u0000-\u007f]/; // negate unicode code point 0 to 127 trace( rx.test( '\u0080' ) ); // false (expected true) 。如果不是在ActionScript中似乎是非符合ECMA的错误。

答案 1 :(得分:0)

我不确定AS3是否支持unicode RegExp,例如Python。 我可以建议以下解决方案,这将有助于你做你想做的事情,但我确信它对于长串很慢。

function containsUnicode(text:String):Boolean
{
    for (var i:int = text.length - 1; i >= 0; i--)
    {
        if (text.charCodeAt(i) > 127)
            return true;
    }

    return false;
}