如果你的要求没那么复杂,大概能通过以下方式实现举例: 关系: a & (b|d) & c 正则: /a(?:b|d)c/
LZ可能想要能通过解释的 条件。。比如 a or and b 就是错的。。 a or (a and ((d) or (a or d))) ) 也是错的。。:D
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ※以下是引用14楼 muxrwc(十月,期待) 在2007-07-20 14:20:41 的发言: ────────────────────────────────────────── LZ可能想要能通过解释的 条件。。 比如 a or and b 就是错的。。 a or (a and ((d) or (a or d))) ) 也是错的。。 :D ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━哦,明白了,前面我理解错也就是说and和or是关键字, 那像 band and a 这样的处理起来挺麻烦了
var str = "a and or c and d" var str2 = str.replace(/\band\b/ig, "&&"); str2 = str2.replace(/\bor\b/ig, "||"); var re = /\b\w+\b/ig; var definiens = ""; while(re.exec(str2)) { definiens += RegExp.lastMatch + "=true;"; } try { eval(definiens + str2); alert("true"); } catch(e) { alert("false"); }
\w+(( (and|or)( not)? \w+)+?)*
\w+(?:[\s]*(?:and|or)[\s]*\w+)*
\w+(( (and|or) \w+)+?)*
然后eval即可。。如果要一个式子的话JS是不可能滴
比如你欠套了若干层括号
try {eval(替换后的结果);alert(true);} catch (exp) {alert(false);}
如果要一个式子的话JS是不可能滴貌似PHP里有个什么R听说过呵。。只懂JS正则。。
所以最简策略就是eval
关系: a & (b|d) & c
正则: /a(?:b|d)c/
a or (a and ((d) or (a or d))) )
也是错的。。:D
※以下是引用14楼 muxrwc(十月,期待) 在2007-07-20 14:20:41 的发言:
──────────────────────────────────────────
LZ可能想要能通过解释的 条件。。
比如 a or and b 就是错的。。
a or (a and ((d) or (a or d))) )
也是错的。。
:D
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━哦,明白了,前面我理解错也就是说and和or是关键字,
那像 band and a 这样的处理起来挺麻烦了
※以下是引用11楼 muxrwc(十月,期待) 在2007-07-20 14:09:18 的发言:
──────────────────────────────────────────
不过如果欠套的话。。还需要判断括号里的逻辑。
所以最简策略就是eval
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
确实提供了一个不错的思路
var str2 = str.replace(/\band\b/ig, "&&");
str2 = str2.replace(/\bor\b/ig, "||");
var re = /\b\w+\b/ig;
var definiens = "";
while(re.exec(str2))
{
definiens += RegExp.lastMatch + "=true;";
}
try
{
eval(definiens + str2);
alert("true");
}
catch(e)
{
alert("false");
}
※以下是引用楼主 wanshiylj() 在2007-07-20 16:52:51 的发言:
──────────────────────────────────────────
你写的这个好像没有考虑到括号的问题啊。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━你不测试就说话,什么叫“好像” -_-#
var str2 = str.replace(/\band\b/ig, "&&");
str2 = str2.replace(/\bor\b/ig, "||");
var re = /\b\w+\b/ig;
var definiens = "";
while(re.exec(str2))
{
definiens += RegExp.lastMatch + "=true;";
}
try
{
eval(definiens + str2);
alert("true");
}
catch(e)
{
alert("false");
}
我前面给你写的那个程序已经可以处理括号的情况了,你测试都不测试一下,真是浪费我表情!
<head>
<script language="Javascript1.2" >
function checkAddress(Email)
{
var str = "document.f1.Email.value";
var str2 = str.replace(/\band\b/ig, "&&");
str2 = str2.replace(/\bor\b/ig, "||");
var re = /\b\w+\b/ig;
var definiens = "";
while(re.exec(str2))
{
definiens += RegExp.lastMatch + "=true;";
}
try
{
eval(definiens + str2);
alert("true");
document.f1.Email.select();
document.f1.Email.focus();
}
catch(e)
{
alert("false");
document.f1.Email.select();
document.f1.Email.focus();
}
}
</script>
</head>
<body>
<form name="f1" method="post" onsubmit="return check()">
Email<input name="Email" type="text">
<input type="submit" value="提交">
</form>
</body>
</html>
帮我看看哪里写错了。
更正
<form name="f1" method="post" onsubmit="return checkAddress(Email)">