关于从页面取得的正则表达式验证出错的问题?这个问题挺奇怪的,非常奇怪,哪位遇到过。。。

junglesong 2008-04-06 10:21:14
代码如下:
var regexStr="^"+validChar+"$";
var regex=new RegExp(regexStr);
return regex.test(inputValue);
如果我直接把validChar写成\\d+,当inputValue是数字时返回真,这没有一点问题。
奇怪的是如果validChar是从页面上取得的\\d+,那验证返回值死活都是假,真是奇怪也哉?
...全文
163 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
leer168 2008-04-09
  • 打赏
  • 举报
回复
mark
hbhbhbhbhb1021 2008-04-06
  • 打赏
  • 举报
回复
两种情况,本来以为要多转意的,已经测试了,try it

<input name="haha">
<input name="re" value="\d+">
<input name="button1" type="button" value="test" onclick="show(document.getElementById('re').value,document.getElementById('haha').value)">
<script language=javascript>
function show(validChar,inputValue){
var regexStr="^"+validChar+"$";
var regex=new RegExp(regexStr);
alert(regex.test(inputValue));
}
</script>


<input name="haha">
<input name="button1" type="button" value="test" onclick="show('\\d+',document.getElementById('haha').value)">
<script language=javascript>
function show(validChar,inputValue){
var regexStr="^"+validChar+"$";
var regex=new RegExp(regexStr);
alert(regex.test(inputValue));
}
</script>
junglesong 2008-04-06
  • 打赏
  • 举报
回复
TO hbhbhbhbhb1021 :
\\\\d+ 试过了,不好用。

To numa001 :
也是一样。
numa001 2008-04-06
  • 打赏
  • 举报
回复
eval(validChar)试试看。。。
hbhbhbhbhb1021 2008-04-06
  • 打赏
  • 举报
回复
因为这里的\要转意,所以你在页面上取的应该是
\\\\d+
junglesong 2008-04-06
  • 打赏
  • 举报
回复
哪位知道怎么解决问题?
junglesong 2008-04-06
  • 打赏
  • 举报
回复
谢谢hbhbhbhbhb1021 的帮助,现在我已经全部解决问题了,
这些写法如下:
员工号:"\d{4}"
姓名:"[\u4E00-\u9FA5]{2,3}"
邮件:"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
费用:"\d+(\.\d{0,2})*"

主要就是将原来双斜杠的地方改成了单斜杠。虽然看上去比较别扭,但能运作比不运作强多了。

如果能写双斜杠,还是规范的也能在java中用的正则表达式写法,就更好了,有什么办法能让它实现吗?
junglesong 2008-04-06
  • 打赏
  • 举报
回复
对,大意了,这里写错了。

我再试试其它的先。
hbhbhbhbhb1021 2008-04-06
  • 打赏
  • 举报
回复
这个问题不是出在那里了
[\u4E00-\u9FA5]{2,3}
是{2-3}这个不符合正则的规则
junglesong 2008-04-06
  • 打赏
  • 举报
回复
下面是我的具体调用语句。

/**
* 检查文本框
*/
function checkTextBox(vTextBox){
// 取得文本框中允许输入的合法文字正则表达式
var validChar=vTextBox.getAttribute("validChar");

// 取得文本框的输入
var inputValue=vTextBox.value;

// 进行正则表达式验证
//alert("表达式为"+validChar);
//alert("验证的字符串为"+inputValue);
var regexStr="^"+validChar+"$";
var regex=new RegExp(regexStr);
return regex.test(inputValue);
}
junglesong 2008-04-06
  • 打赏
  • 举报
回复
我使用的getAttribute,validChar的值能够获得。
hbhbhbhbhb1021 2008-04-06
  • 打赏
  • 举报
回复
validChar这个是自定义的属性啊,具体调用是怎么调用的呢
junglesong 2008-04-06
  • 打赏
  • 举报
回复
<input type="text"
name="name"
validChar="[\u4E00-\u9FA5]{2-3}"
/>

我的应用中是这样的,输入框的验证表达式作为属性写在input标签中,验证时取出验证,刚才去掉一个斜杠可以验证数字了,现在在汉字验证的地方遇到了麻烦,不知该如何处理?
hbhbhbhbhb1021 2008-04-06
  • 打赏
  • 举报
回复
原因就在于一些特殊字符需要转意上面了
JS的正则如果在new RegExp中,这里是当字符串参数传进去的,所以需要转意,而直接写re=//这里则不需要转意,
而在页面上获取的,有可能是已经经过转意后的字符,也有可能是没经过转意的,所以要具体情况具体看了。
junglesong 2008-04-06
  • 打赏
  • 举报
回复
to hbhbhbhbhb1021 :

首先谢谢您的大力帮助。
第一种做法和我实际使用比较相识,试了一下能通过,但为什么要去掉一个斜杠呢,想不明白,您能说说吗?
另外去掉一个斜杠的做法似乎不太还,因为应用中还有汉字验证和邮件验证,首先在汉字验证这就通不过。

往您明示。

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧