• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FLEX3:RegExpValidatorの正規表現)

FLEX3: RegExpValidatorの正規表現

このQ&Aのポイント
  • Flex3のRegExpValidatorでセンセーショナルなタイトルを作成。
  • 正規表現で<>, "'を検出するinvalidに設定するvalidaterを作成したい。
  • いくつか試した正規表現コードを挙げている。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

package { import flash.display.Sprite; import flash.events.Event; import mx.validators.RegExpValidator; import mx.events.ValidationResultEvent; import flash.text.TextField; /** * ... * @author himajin100000 */ public class Main extends Sprite { private var textfield:flash.text.TextField; public function Main():void { textfield = new flash.text.TextField(); textfield.width = 5000; this.addChild(textfield); var expression:String = "あ<い"; var validator:mx.validators.RegExpValidator; validator = new mx.validators.RegExpValidator(); validator.expression = "^[^<>\"']*$"; validator.addEventListener("valid", this.validated); validator.addEventListener("invalid", this.invalidated); validator.validate(expression); //質問文でやりたがっていると思われること。ここから。(個人的に非推奨) //http://www.revulo.com/blog/20080415.htmlを参考にしました。 expression = "あ&lt;" validator.expression = "^(?:(?!(&gt;|&lt;|&amp;|&quot;|&apos;)).)*$"; validator.validate(expression); //ただし… expression = "あ&#x3C;" validator.validate(expression); expression = "あ<" validator.validate(expression); //の二つはvalidにしてある。(面倒くさいだけ) //===================================== //ここまでは伏線。ここから本題。 //===================================== // たぶんHTMLやXMLにかかわるコードだと思うんだけど, // validateとescapeは明確に異なり // http://d.hatena.ne.jp/gallu/20081112/p1 // validateは先に,escapeは後に行うべき。 // > なお、普通に>や<をexpressionに含めると動作しないのでエンティティを使いました。 // というようなものが求められてしまうのは,「設計自体がおかしい」からであって, // その部分を設計したコーダーを罵ってでも,その部分の変更させるべきである。 // その上で,俺はXMLを使う。 // http://livedocs.adobe.com/flex/3/langref/XML.html //============================= //おまけ(個人的に非推奨。escapeされた状態をプログラムから扱わなくて良い手を考えるべき。 //それとは別に<!-- -->とか注釈宣言があったりするかもしれないし…) //=============================== try { var s1:XML = XML("<hoge>" + "&lt;あ&#x3C;" + "</hoge>"); validator.expression = "^[^<>\"']*$"; validator.validate(s1.toString()); }catch (e:Error) { textfield.appendText("bug "); } //============================== //気づいたこと //================================ //何故かcatchされない!?(実体参照にはセミコロンが必要なはず。) try{ var s2:XML = XML("<hoge>" + "&gt" + "</hoge>"); }catch (e:Error) { textfield.appendText("bug "); } } public function validated(e:mx.events.ValidationResultEvent ):void { textfield.appendText("valid "); } public function invalidated(e:mx.events.ValidationResultEvent ):void{ textfield.appendText("invalid "); } } }

9mm
質問者

お礼

わざわざ、ありがとうございます! 理解するのに時間がかかりそうなので、取り急ぎお礼まで。

その他の回答 (1)

回答No.2

ないのかと思って#1を書いたけどこっちを使うよう修正。 http://livedocs.adobe.com/flex/3/langref/flash/xml/XMLDocument.html