JS难题,正则相关

hztgcl1986 2008-10-13 09:50:57
一个文本框,当用户输入字母、数字、下划线、横线时做出相应操作,否则不执行。


<script language="javascript" type="text/javascript">
/*============================================================
函数功能: 根据ID返回对象
参数说明: objID 对象id
*/
function $(objID)
{
return document.getElementById(objID);
}

/*============================================================
函数功能: 绑定事件
参数说明: obj 对象 ; eventName 事件名称 ; eventFunction 事件处理程序 ; useCapture 用于W3C
*/
function addEventListener(obj,eventName,eventFunction,useCapture)
{
if (isIE())
{
eventName.substring(0,2) != "on" ? eventName = "on" + eventName : eventName = eventName; //click转onclick
obj.attachEvent(eventName,eventFunction);
}
else
{
eventName.substring(0,2) == "on" ? eventName = eventName.substring(2,eventName.length) : eventName = eventName; //onclick转click
obj.addEventListener(eventName,eventFunction,useCapture);
}
}

/*============================================================
函数功能: 标识,只能输入数字、字母、下划线、横线
参数说明: id 文本框id
*/
function onlyMark(id)
{
onlyInput(id,/^[0-9a-zA-Z_\-]+$/g);
}

/*============================================================
函数功能: 只能输入正则指定内容
参数说明: id 文本框ID ; source RegExp.source
*/
function onlyInput(id,source)
{
var txt = $(id);
if (txt == null) return; //对象不存在
var handleOnly = function ()
{
if (source.test(txt.value)) //不执行任何操作
{return false;window.alert("合法");}
else
{$("dt2").value = "执行了:" + txt.value + ":" + source.test(txt.value);}
}


if (isIE())
txt.attachEvent("onpropertychange",handleOnly);
else
txt.addEventListener("input",handleOnly,false);
}
</script>




<form id="soForm" name="soForm">
<input type="text" id="dt1" name="dt1" /><br />
<input type="text" id="dt2" name="dt2" />

<br />
</form>
<script language="javascript" type="text/javascript">
onlyMark("dt1");
</script>


错误就在下面这些代码
if (source.test(txt.value)) //不执行任何操作
 {return false;window.alert("合法");}
else
 {$("dt2").value = "执行了:" + txt.value + ":" + source.test(txt.value);}


无论source.test(txt.value)执行是true还是false好像,else语句始终是执行了,不知道是为什么
...全文
97 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyondmlee 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hztgcl1986 的回复:]
请问在这里,带g和不带g有什么区别呢?
[/Quote]
同上。。
strife013 2008-10-13
  • 打赏
  • 举报
回复
{return false;window.alert("合法");}

return了,alert看不出来
cloudgamer 2008-10-13
  • 打赏
  • 举报
回复
如果这里非得用g
就重设一下lastIndex
		source.lastIndex =0;
if (source.test(txt.value)) //不执行任何操作


建议还是不要用
hztgcl1986 2008-10-13
  • 打赏
  • 举报
回复
谢谢各位,立马去结贴。
cloudgamer 2008-10-13
  • 打赏
  • 举报
回复
g是全局匹配(多次匹配)
因为test匹配一次(当然包括多次)就会返回true
所以根本不需要用g
2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chinmo 的回复:]
onlyInput(id,/^[0-9a-zA-Z_\-]+$/g);
这个函数不要g
直接

onlyInput(id,/^[0-9a-zA-Z_\-]+$/);
即可
[/Quote]

学习下,有人说下为什么这样做呢?
hztgcl1986 2008-10-13
  • 打赏
  • 举报
回复
请问在这里,带g和不带g有什么区别呢?
jhwcd 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cloudgamer 的回复:]
onlyInput(id,/^[0-9a-zA-Z_\-]+$/);

不要g
[/Quote]
cgisir 2008-10-13
  • 打赏
  • 举报
回复
噢, 少个IE判断
我是这么做的
<script language="javascript" type="text/javascript">
/*============================================================
函数功能: 根据ID返回对象
参数说明: objID 对象id
*/
function isIE(){ // 随便写的一个方法, 临时用下 :)
return document.attachEvent;
}
function $(objID)
{
return document.getElementById(objID);
}

/*============================================================
函数功能: 绑定事件
参数说明: obj 对象 ; eventName 事件名称 ; eventFunction 事件处理程序 ; useCapture 用于W3C
*/
function addEventListener(obj,eventName,eventFunction,useCapture)
{
if (isIE())
{
eventName.substring(0,2) != "on" ? eventName = "on" + eventName : eventName = eventName; //click转onclick
obj.attachEvent(eventName,eventFunction);
}
else
{
eventName.substring(0,2) == "on" ? eventName = eventName.substring(2,eventName.length) : eventName = eventName; //onclick转click
obj.addEventListener(eventName,eventFunction,useCapture);
}
}

/*============================================================
函数功能: 标识,只能输入数字、字母、下划线、横线
参数说明: id 文本框id
*/
function onlyMark(id)
{
onlyInput(id,/^[\w\-]+$/);
}

/*============================================================
函数功能: 只能输入正则指定内容
参数说明: id 文本框ID ; source RegExp.source
*/
function onlyInput(id,source)
{
var txt = $(id);
if (txt == null) return; //对象不存在
var handleOnly = function ()
{
if (source.test(txt.value)) //不执行任何操作
{return false;window.alert("合法");}
else
{$("dt2").value = "执行了:" + txt.value + ":" + source.test(txt.value);}
}


if (isIE())
txt.attachEvent("onpropertychange",handleOnly);
else
txt.addEventListener("input",handleOnly,false);
}
</script>





HTML code

<form id="soForm" name="soForm">
<input type="text" id="dt1" name="dt1" /><br />
<input type="text" id="dt2" name="dt2" />

<br />
</form>
<script language="javascript" type="text/javascript">
onlyMark("dt1");
</script>

  • 打赏
  • 举报
回复
onlyInput(id,/^[0-9a-zA-Z_\-]+$/g);
这个函数不要g
直接

onlyInput(id,/^[0-9a-zA-Z_\-]+$/);
即可
cloudgamer 2008-10-13
  • 打赏
  • 举报
回复
onlyInput(id,/^[0-9a-zA-Z_\-]+$/);

不要g
cgisir 2008-10-13
  • 打赏
  • 举报
回复
这样试试
function onlyMark(id)
{
onlyInput(id,/^[\w\-]+$/);
}
china_cao 2008-10-13
  • 打赏
  • 举报
回复
去google搜搜,应该有

87,922

社区成员

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

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