<script>
var str = "abc??fdsa??";
var newstr = str.replace(/\?\?/g, '');
if(str==newstr)
{
alert("不存在两个连续的“?”");
}
else
{
alert("存在两个连续的“?”");
}if(newstr.indexOf('?')==-1)
{
alert("不存在单个的“?”");
}
else
{
alert("存在单个的“?");
}
</script>
var str = "abc??fdsa??";
var newstr = str.replace(/\?\?/g, '');
if(str==newstr)
{
alert("不存在两个连续的“?”");
}
else
{
alert("存在两个连续的“?”");
}if(newstr.indexOf('?')==-1)
{
alert("不存在单个的“?”");
}
else
{
alert("存在单个的“?");
}
</script>
解决方案 »
- 正则获取Html标记中的内容
- 使用ymprompt.js 关于弹出层关闭问题
- 选择一个checkbox,把值加入js 数组arr中,如果去掉勾选,就从arr去掉value,这个这么实现?
- setTimeout和setInterval函数有何区别
- 一个checkbox该如何用js判断
- 求助 js 代码 js实现页面浮动层
- 请问如何让浏览器窗口没有菜单条,工具条及地址栏之类的东西呀
- 怎么限制用户的浏览地址,比如输入http://1.gif,就提示它不能查看。在线等100分
- 表单对象的name可不可以当作参数传递?
- angularjs在微信内置浏览器中的兼容性问题
- 请问网页中如何实现这种效果,内详
- 如何让一个层显示在屏幕中间?
<!--
function test(str){
//测试字符串是否是全部成对的,或全部单个的
if(str.indexOf("??")!=-1 && (str.replace("??","")).indexOf("?")==-1)
{alert("all couple")}
//如果存在"??",且把全部的"??"替换为空后不再存在"?",则说明原来的字符串中有且只含有成对的"??"if(str.indexOf("?")!=-1 && str.indexOf("??")==-1){alert("all single")}
//如果存在"?",且不存在"??",说明原来的字符串在全部是单个的"?"
}
//-->
</script>
<input id=text1><input type=button onclick="test(text1.value)" value=test>
你这句话有些漏洞,比如说我四个八个?连在一起就跳过了你的检测了,再说你的这种str.replace("??","")写法本身就有问题(不是全局替换)。所以你的正则应该再改:
function test(str)
{
if(!/\?/.test(str.replace(/([^\?])\?\?([^\?])/g, "$1$2")))
alert("双问号确实是成对出现的,并且出现的位置不在字头字尾");
else alert("你的字符串非法!");
}
2.不能重复,你用indexOf("??")就可以判断了
你的提醒是对的,按我原来的想法,确实漏考虑了2n个连续?的情况,按此思路,再加个判断是否含有连续三个?的子句,即indexOf("???")==-1 就可以了。
我还有个重大失误是,js手册里说的stringObj.replace(rgExp, replaceText),如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找.所以我没写成正则的形式,本意是以为他会象vbs里的replace那样,进行全局替换的,结果却是只替换一次,真正让我大跌眼镜。
你的正则我还没细看。先忙去了,有空再看。