浏览 8046 次
锁定老帖子 主题:js动态正则表达式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-05
这时候我们就要问了:怎样才能写出动态的正则表达式呢,修改了配置文件,就不需要再去动代码了呢? 笔者翻阅了js手册,没有找到将字符串转换成正则表达式的方法,但是可以用eval();方法动态执行脚本的方式间接解决这个问题!从而写出更加通用的代码! 下面贴出上例的通用解决方案: /** * 验证月份表单输入是否合法 * pattern : 月份格式字符串 * id : 表单id */ function validateMonth(pattern, id) { var text = document.getElementById(id); var monthStr = text.value; var splitChar = ""; if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2); eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;"); //var re = /\d{4}-\d{2}$/; if(monthStr.match(re) == null) { alert("请参考格式[" + pattern + "]输入!\n" + "e.g \"2010" + splitChar + "11\" or \"2010" + splitChar + "03\""); text.value = ""; text.focus(); return false; } return true; } 有一点值得注意:动态拼出脚本字符串传给eval()方法执行时,需要对字符'\'转义 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-05
最后修改:2010-03-05
var r = new RegExp("^\\d{4}"+"-"+"\\d{2}$") |
|
返回顶楼 | |
发表时间:2010-03-08
lorz 写道 var r = new RegExp("^\\d{4}"+"-"+"\\d{2}$") 经过测试,该方法也是可行的!只要将"-"换成变量名就能写出动态正则表达式!(奇了怪了,之前也试过这个办法,怎么当时就失败了呢?) |
|
返回顶楼 | |
发表时间:2010-03-10
楼主尴尬了。。
|
|
返回顶楼 | |
发表时间:2010-03-10
最后修改:2010-03-10
var r = new RegExp(); r.compile('^[a-z]+$'); r.test('abc'); r.compile('^\\d+$'); r.test('123'); |
|
返回顶楼 | |
发表时间:2010-03-17
= =!
楼主不知道 其实JS的正则可以 new RegExp()吗 |
|
返回顶楼 | |
发表时间:2010-06-30
cuishen 写道 lorz 写道 var r = new RegExp("^\\d{4}"+"-"+"\\d{2}$") 经过测试,该方法也是可行的!只要将"-"换成变量名就能写出动态正则表达式!(奇了怪了,之前也试过这个办法,怎么当时就失败了呢?) var r = new RegExp("^\\d{4}"+"-"+"\\d{2}$") "abc".replace(\[b]\g,"c"); 注意区别:RegExp的构造函数,参数的前后是不加\\的,而不用RegExp构造正则,是需要的。 不知道这是不是你疑惑的地方! |
|
返回顶楼 | |
发表时间:2010-07-01
|
|
返回顶楼 | |
发表时间:2010-07-02
最后修改:2010-07-02
最好不要使用eval()函数,会为程序带来风险很安全隐患
http://www.iteye.com/topic/670774 |
|
返回顶楼 | |