在开发WEB项目时,页面上有一些查询条件输入框,后台一般采取拼凑SQL的方式来处理。例如在.NET中类似代码:
StringBuilder sb
=
new
StringBuilder();
sb.Append(
"
SELECT * FROM A WHERE 1=1
"
);
//
此处没有对特殊字符进行处理,只是为了演示
if
(txtName.Text
!=
string
.Empty) sb.Append(
"
AND name LIKE '%
"
+
txtName.Text
+
"%
'
"
);
......
......
//
在前台处理时,当用户输入的表达式有误则清空输入框
if
(txtCount.Text
!=
string
.Empty) sb.Append(
"
AND mycount
"
+
txtCount.Text);
......
下面是测试的页面代码:
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<
script
>
...
function validExpression(i)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
var arrRegex = [/^ *(>|<|<>|>=|<=|=) *d+ *$/, /^ *(>|<|<>|>=|<=|=) *d+(.d+)? *$/];
if (!arrRegex[i].test(event.srcElement.value))
document.getElementById('a').innerText = event.srcElement.name+'输入格式不对!';
else
document.getElementById('a').innerText = "";
}
</
script
>
</
head
>
<
body
>
年龄:
<
input
type
="text"
id
="age"
onblur
="validExpression(0);"
name
="年龄"
><
br
/>
价格:
<
input
type
="text"
id
="price"
onblur
="validExpression(1);"
name
="价格"
><
br
/>
<
span
style
="color:red"
id
="a"
></
span
>
</
body
>
</
html
>
最后,if u have a better idea than mine,please tell me.thanks:)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
字符串模糊查找可以这样做,但是如果是数字比较,则还需要在页面中加入下拉框,下拉框中有“大于”,“等于”,“小于”等等关系,然后旁边是一个文本框,供用户输入值,这种方式既不友好,也有问题。如果在文本框中输入非数字,后台还需要try..catch处理。其实这些都完全可以放在前台来完成,后台也无需再对文本框输入的是否是数字而操心了。
正则表达式真是个好冬冬,无需太多代码,就把问题搞定。我想要用户在输入数字的查询表达式时像这样,例如我要查找年龄大于50岁的,那么我直接在文本框中输入“>50”即可。又直观,又方便。
/^ *(>|<|<>|>=|<=|=) */d+ *$/ 这个表达式是针对输入整数的;
/^ *(>|<|<>|>=|<=|=) */d+(/./d+)? *$/ 这个表达式是针对输入包含小数的;
在上面的正则表达式中考虑了用户会输入一些多余的空格字符的情况。当然,如果对于输入某一个范围之内的表达式就不管用了。毕竟我现在给出的表达式是只针对于拼凑SQL条件的。后台的代码就可以方便的处理了!
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)