-
<?xml version="1.0" encoding="utf-8"?>
-
<!--
-
Regex Tester v2.0.1
-
Author: Seven Yu (Dofy)
-
E-Mail/gtalk: dofyyu at gmail dot com
-
URL: http://dofy.net/ http://phpz.org/
-
-->
-
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
-
layout="vertical" horizontalAlign="left" width="400" height="500"
-
creationComplete="initApp();"
-
showStatusBar="false"
-
backgroundColor="0xeeeeee"
-
xmlns:ctrler="org.phpz.controls.*">
-
<mx:Style>
-
Application {
-
padding-top: 10px;
-
padding-right: 10px;
-
padding-bottom: 10px;
-
padding-left: 10px;
-
}
-
Application, ToolTip {
-
font-size: 12px;
-
}
-
Label {
-
font-weight: bold;
-
}
-
</mx:Style>
-
<mx:Script>
-
<![CDATA[
-
import mx.events.DragEvent;
-
import mx.controls.Alert;
-
import mx.controls.CheckBox;
-
import mx.events.ItemClickEvent;
-
-
private const FILE_MAX_SIZE:uint = 1024;
-
-
private const TITLE_WARNING:String = "Warning!";
-
private const TITLE_OK:String = "Ok!";
-
-
private const MSG_ONE_FILE:String = "Accept one file only.";
-
private const MSG_NOT_TEXT_FILE:String = "Accept Text file only.";
-
private const MSG_EXCEED_SIZE:String = "File size could not exceed " + FILE_MAX_SIZE + " bytes.";
-
private const MSG_REGEX_PASTED:String = "Regex pasted.";
-
-
private var reg:RegExp = new RegExp();
-
private var objArray:Array = new Array();
-
private var curIndex:int;
-
-
private var _curLastIndex:int;
-
private var _curFlags:Array = new Array();
-
private var flags:Array = new Array(
-
["g", "global"],
-
["i", "ignore case"],
-
["m", "multiline"],
-
["s", "dotall"],
-
["x", "extended"]);
-
-
/**
-
* 初始化
-
* */
-
private function initApp():void
-
{
-
// 添加修饰符 checkbox
-
var curFlag:CheckBox;
-
for (var i:uint = 0; i <flags.length; i++)
-
{
-
curFlag = frmFlags.addChild(new CheckBox()) as CheckBox;
-
curFlag.label = flags[i][0];
-
curFlag.toolTip = flags[i][1];
-
curFlag.addEventListener(Event.CHANGE, flagChangeHandler);
-
}
-
pattern.setFocus();
-
// 绑定事件
-
nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
-
pattern.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, dragEnterHandler);
-
pattern.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, dragDropHandler);
-
testText.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, dragEnterHandler);
-
testText.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, dragDropHandler);
-
}
-
-
override protected function keyDownHandler(event:KeyboardEvent):void
-
{
-
if (event.controlKey)
-
{
-
switch (event.keyCode)
-
{
-
case Keyboard.NUMBER_1:
-
{
-
pattern.setFocus();
-
break;
-
}
-
case Keyboard.NUMBER_2:
-
{
-
testText.setFocus();
-
break;
-
}
-
case Keyboard.BACKQUOTE:
-
{
-
(frmFlags.getChildAt(0) as CheckBox).setFocus();
-
break;
-
}
-
}
-
}
-
}
-
-
/**
-
* 设置修饰符
-
* */
-
private function flagChangeHandler(evt:Event):void
-
{
-
var obj:Object = evt.target;
-
obj.selected
-
? _curFlags.push(obj.label)
-
: _curFlags.splice(_curFlags.indexOf(obj.label), 1);
-
setRegContent();
-
}
-
-
/**
-
* 执行测试
-
* */
-
private function test():void
-
{
-
var execObj:Object;
-
// 重置结果数组和索引变量
-
objArray = new Array();
-
curIndex = 0;
-
-
do
-
{
-
_curLastIndex = reg.lastIndex;
-
(execObj = reg.exec(testText.text)) != null && objArray.push(execObj);
-
}
-
while (_curLastIndex != reg.lastIndex && reg.lastIndex> 0)
-
-
displayObj(0); // 显示结果
-
}
-
-
/**
-
* 显示结果
-
* */
-
private function displayObj(offset:int):void
-
{
-
// 设置结果索引导航
-
if (objArray.length> 0)
-
{
-
curIndex += offset;
-
if (curIndex <0)
-
{
-
curIndex = objArray.length - 1;
-
}
-
else if (curIndex>= objArray.length)
-
{
-
curIndex = 0;
-
}
-
}
-
-
// 显示结果信息
-
var obj:Object = objArray[curIndex];
-
frmResult.label = obj
-
? "Result: " + (curIndex+1) + " of " + objArray.length + " match."
-
: "Result: no match.";
-
result.text = "";
-
for ( var k:String in obj)
-
{
-
result.text += k + ": \"" + obj[k] + "\"\n";
-
}
-
}
-
-
/**
-
* 检测正则
-
* */
-
private function checkRegexp(data:String):void
-
{
-
var re:RegExp = /^\/(.*?)\/([gimsx]*)$/is;
-
var reObj:Object = re.exec(data);
-
if (reObj == null)
-
{
-
pattern.text = data;
-
}
-
else
-
{
-
pattern.text = reObj[1];
-
var chks:Array = frmFlags.getChildren();
-
for (var i:uint = 0; i <chks.length; i++)
-
{
-
chks[i].selected = (reObj[2].indexOf(chks[i].label) !== -1);
-
}
-
_curFlags = (reObj[2] as String).split('');
-
}
-
}
-
-
/**
-
* 替换换行符
-
* */
-
private function cleanText(txt:String):String
-
{
-
return txt.replace(/\r\n/g, "\n");
-
}
-
-
/**
-
* 结果导航
-
* */
-
private function displayObjHandler(evt:ItemClickEvent):void
-
{
-
displayObj(evt.index * 2 - 1);
-
}
-
-
/**
-
* 拖拽实现
-
* */
-
private function dragEnterHandler(evt:NativeDragEvent):void
-
{
-
stage.nativeWindow.activate();
-
(evt.currentTarget as TextArea).setFocus();
-
var clip:Clipboard = evt.clipboard;
-
if (clip.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
-
{
-
NativeDragManager.acceptDragDrop(evt.currentTarget as InteractiveObject);
-
}
-
}
-
-
/**
-
* 放置事件
-
* */
-
private function dragDropHandler(evt:NativeDragEvent):void
-
{
-
var loader:URLLoader = new URLLoader();
-
var txtBox:TextArea = evt.currentTarget as TextArea;
-
var file:File = checkFile(evt.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array);
-
loader.addEventListener(Event.COMPLETE,
-
function(ievt:Event):void
-
{
-
txtBox.id == "pattern"
-
? checkRegexp(cleanText(ievt.target.data))
-
: txtBox.text = cleanText(ievt.target.data);
-
setRegContent();
-
}
-
);
-
file != null && loader.load(new URLRequest(file.nativePath));
-
}
-
-
private function checkFile(files:Array):File
-
{
-
if (files == null)
-
{
-
return null;
-
}
-
if (files.length> 1)
-
{
-
Alert.show(MSG_ONE_FILE, TITLE_WARNING);
-
return null;
-
}
-
var file:File = files[0];
-
if (file.isDirectory || file.extension.toLowerCase() != 'txt')
-
{
-
Alert.show(MSG_NOT_TEXT_FILE, TITLE_WARNING);
-
return null;
-
}
-
if (file.size> FILE_MAX_SIZE)
-
{
-
Alert.show(MSG_EXCEED_SIZE, TITLE_WARNING);
-
return null;
-
}
-
return file;
-
}
-
-
/**
-
* 设置表达式
-
* */
-
private function setRegContent():void
-
{
-
reg = new RegExp(pattern.text, _curFlags.join(''));
-
test();
-
}
-
-
/**
-
* 显示关于对话框
-
* */
-
private function showAboutInfo():void
-
{
-
result.htmlText = "<p align=\"center\">";
-
result.htmlText += "<b><font size=\"17\">Regex Tester</font></b> ";
-
result.htmlText += "<font color=\"#999999\">version 2.0.1</font><br />";
-
result.htmlText += "<b>Author:</b> Seven Yu (Dofy)<br />";
-
result.htmlText += "<b>E-Mail/gtalk:</b> dofyyu" + "@gmail.com<br />";
-
result.htmlText += "<b>URL:</b> <a href=\"http://dofy.net/\"><u>dofy.net</u></a> & ";
-
result.htmlText += "<a href=\"http://phpz.org/\"><u>phpz.org</u></a><br />";
-
result.htmlText += "<br />Copyright (C) 2008 dofy's den all rights reserved.";
-
result.htmlText += "</p>";
-
}
-
]]>
-
</mx:Script>
-
<mx:VDividedBox width="100%" height="100%">
-
<mx:VBox width="100%" height="100%">
-
<mx:FormItem label="Regex:" width="100%" direction="horizontal" horizontalAlign="right">
-
<mx:Button label="Copy">
-
<mx:click>
-
<![CDATA[
-
Clipboard.generalClipboard.setData(ClipboardFormats.TEXT_FORMAT, reg)
-
&& Alert.show(MSG_REGEX_PASTED, TITLE_OK);
-
]]>
-
</mx:click>
-
</mx:Button>
-
<mx:Button label="About" click="showAboutInfo();" />
-
</mx:FormItem>
-
<ctrler:TabTextArea id="pattern" width="100%" height="100%" keyUp="setRegContent();" />
-
<mx:FormItem id="frmFlags" label="Flag:" direction="horizontal" />
-
</mx:VBox>
-
-
<mx:VBox width="100%" height="100%">
-
<mx:Label text="Test Text:" />
-
<ctrler:TabTextArea id="testText" width="100%" height="100%" keyUp="test();" />
-
</mx:VBox>
-
-
<mx:VBox width="100%" height="100%">
-
<mx:FormItem id="frmResult" label="Result:" width="100%" horizontalAlign="right">
-
<mx:ButtonBar id="btnBar" itemClick="displayObjHandler(event);">
-
<mx:Array>
-
<mx:String><![CDATA[<]]></mx:String>
-
<mx:String><![CDATA[>]]></mx:String>
-
</mx:Array>
-
</mx:ButtonBar>
-
</mx:FormItem>
-
<mx:TextArea id="result" editable="false" tabEnabled="false" width="100%" height="100%" />
-
</mx:VBox>
-
-
</mx:VDividedBox>
-
</mx:WindowedApplication>