3

理由はわかりませんが、動作が奇妙です。正規表現で \u0000 を使用すると、何にも一致しません。

var regexpNotWorking:RegExp = new RegExp("[^\u0000-\u0020]");
var regexpWorking:RegExp = new RegExp("[^\u0001-\u0020]");
var input:String = "I should be valid";
trace("not working: " + input.match(regexpNotWorking));
trace("working: " + input.match(regexpWorking));

出力は次のとおりです。

not working: null
working: I

\u0001 が機能しているのに、\u0000 が機能していない理由を知っている人はいますか?

入力に ​​\u0000 が含まれていないことを確認するにはどうすればよいですか?

4

1 に答える 1

1

否定を削除して、正規表現を次のように変更してみませんか。

var regexp:RegExp = /[\u0021-\uFFFF]/;

ところで、Flexの正規表現の周りに新しいRegExpや引用符を使用する必要はありません。

しかし、それはおそらくあなたが探している答えではありません。文字列にNUL文字が含まれているかどうかを確認する1つの方法を次に示します。

public function stringHasNul(value:String):Boolean {
    return (value.length != value.replace("\u0000", "NUL").length);
}

var hasNul:String = "ABC\u0000DEF"
var noNuls:String = "ABCDEF";

trace(hasNul.length); // should be 7
trace(hasNul.search("\u0000")); // wrongly gives 0, should be 3
trace(noNuls.length); // should be 6
trace(noNuls.search("\u0000"));  // wrongly gives 0, should be -1

trace(stringHasNul(hasNul)); // displays true
trace(stringHasNul(noNuls)); // display false

\u0000から\u0020の範囲の文字があるかどうかを確認するには、次のようにします。

var regexp:RegExp = /[^\u0021-\uFFFF]/;

if (somestring.search(regexp) == -1)
{
    // somestring is valid do something with it
}
于 2013-01-17T02:40:09.893 に答える