<html>
<head>
<style>
body, table {
font-size: 10pt;
}
textarea {
width:100%;
border:1 solid #6699cc;
}
.button {width:60px;}
.author_blue {color:blue;}
.author_black {color:black;}
</style>
<title></title>
<script type="text/javascript">
function setWindowSize(width, height){
width = width || 1024;
height = height || 768;
window.moveTo(0, 0);
window.resizeTo(width, height);
}
/*执行处理*/
function processRepeat(){
var isCheckOk = false;
isCheckOk = doCheck();
if(!isCheckOk){
return;
}
doRepeat();
}
/*校验取值范围*/
function doCheck(){
var minVal = document.getElementById("minVal").value;
var maxVal = document.getElementById("maxVal").value;
if(isEmpty(minVal) || isEmpty(maxVal)){
alert("范围不完整!");
return false;
}
if(!isInt(minVal) || !isInt(maxVal)){
alert("范围必须为有效数字!");
return false;
}
return true;
}
//清空内容
function doClear(){
document.getElementById("minVal").value = "";
document.getElementById("maxVal").value = "";
//document.getElementById("input").value = "";
document.getElementById("output").value = "";
}
/*生成内容*/
function doRepeat(){
var minVal = parseInt(document.getElementById("minVal").value);
var maxVal = parseInt(document.getElementById("maxVal").value);
var input = document.getElementById("input").value;
var output = document.getElementById("output");
var stringBuffer = "";
//var reg = new RegExp("{num(\\+|-|\\*|/|%)?\\d*}", "g");
var reg = new RegExp("{(\\s*\\d+\\s*(\\+|-|\\*|/|%)?\\s*)*\\s*num\\s*(\\s*(\\+|-|\\*|/|%)?\\s*\\d+\\s*)*}", "g");
var exprArr = [];
var expr = null;
var evalResult = 0;
var inputTmp = null;
if(minVal <= maxVal){
exprArr = input.match(reg);
if(exprArr != null){
for(var i = minVal; i <= maxVal; i++){
inputTmp = input;
for(var j = 0; j < exprArr.length; j++){
expr = exprArr[j].replace(/\s/g, ""); //去除空格
expr = expr.substring(1, expr.length - 1); //去除大括号
expr = expr.replace(/num/g, i); //将变量替换为实际值
evalResult = parseInt(eval(expr)); //计算结果值
inputTmp = inputTmp.replace(new RegExp(processRegSymbol(exprArr[j]), "g"), evalResult);
}
stringBuffer += inputTmp + "\n";
}
} else {
for(var i = minVal; i <= maxVal; i++){
stringBuffer += input + "\n";
}
}
} else {
exprArr = input.match(reg);
if(exprArr != null){
for(var i = minVal; i >= maxVal; i--){
inputTmp = input;
for(var j = 0; j < exprArr.length; j++){
expr = exprArr[j].replace(/\s/g, ""); //去除空格
expr = expr.substring(1, expr.length - 1); //去除大括号
expr = expr.replace(/num/g, i); //将变量替换为实际值
evalResult = parseInt(eval(expr)); //计算结果值
inputTmp = inputTmp.replace(new RegExp(processRegSymbol(exprArr[j]), "g"), evalResult);
}
stringBuffer += inputTmp + "\n";
}
} else {
for(var i = minVal; i <= maxVal; i++){
stringBuffer += input + "\n";
}
}
}
output.value = stringBuffer;
}
function processRegSymbol(reg){
if(isEmpty(reg)){
return reg;
}
return reg.replace(/\+/g, "\\+").replace(/\*/g, "\\*");
}
function isNull(obj){
if(typeof(obj) == "undefined" || obj == null){
return true;
}
return false;
}
function isEmpty(str){
if(isNull(str)){
alert("String is null!");
return true;
}
if(/\S/.test(str)){
return false;
}
return true;
}
function isInt(num){
if(isEmpty(num) || !/^-?[0-9]+$/g.test(num)){
return false;
}
return true;
}
function shining(){
document.getElementById("author").style.color = "red";
}
</script>
</head>
<body onLoad="">
<fieldset>
<legend>参数设置</legend>
<table style="margin:5;">
<tr><td>变量名:</td><td>num</td></tr>
<tr><td>取值范围:</td><td><input type="text" id="minVal" style="width:80;" maxLength="10" value="1">—<input type="text" id="maxVal" style="width:80;" maxLength="10" value="65"></td></tr>
<tr><td colspan="2">
<input type="button" class="button" value="确定" onClick="processRepeat()">
<input type="button" class="button" value="清空" onClick="doClear()">
</td></tr>
</table>
</fieldset>
<br>
<table style="width:100%;">
<tr><td>输入</td></tr>
<tr><td><textarea id="input" style="height:200;">service-port {num} vlan {num} adsl 0/{num/32}/{num%32}</textarea></td></tr>
<tr><td> </td></tr>
<tr><td>输出</td></tr>
<tr><td><textarea id="output" style="height:250;"></textarea></td></tr>
</table>
</body>
<br>
<label id="author" style="color:blue;">
作者:<br>
时间:2012年6月6日
</label>
</html>