如何合并这个两个正则

cloudgamer 2009-04-30 03:09:12
<script>
var r1=/^(\d+\|)*\d+$/;
var r2=/((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/;

var s = "1|2|3|31|5"

alert(r1.test(s) && !r2.test(s))
</script>


这个符合我的要求
但我用一个验证控件只能用一个正则
如何能把这两个正则合并呢
...全文
340 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2009-05-08
  • 打赏
  • 举报
回复

嗅大了,原来上面写的是错的
[Quote=引用 14 楼 wcwtitxu 的回复:]
也凑凑热闹的

JScript code
/^(?!.*(\d+)\b.*\|\1\b)\d+(?:\|\d+)*$/.test(s)
[/Quote]


// 重新来一个吧, 虽然还长了,不过平均性能还不错
/^(?!.*\b(\d+)\b.*\|\1\b)\d+(?:\|\d+)*$/.test(s)
王集鹄 2009-05-05
  • 打赏
  • 举报
回复
勘误:String.replace()

alert("a1s2d3f4".replace(/(\w)\d/g, "$1"));
王集鹄 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 natineprince 的回复:]
提问\2这个转义是什么意思啊?
[/Quote]这个和relpace中用到的$1 $2 $3 意思一样,在正则本身就写为\1 \2 \3
natineprince 2009-05-05
  • 打赏
  • 举报
回复
提问\2这个转义是什么意思啊?
王集鹄 2009-05-05
  • 打赏
  • 举报
回复
过客的正则就是强( ⊙o⊙ )哇

看来?:、?!得再熟悉一下,,,

/^((\d+)(?!.*\|\2\b)\|)*\d+$/
cloudgamer 2009-05-02
  • 打赏
  • 举报
回复
厉害厉害
  • 打赏
  • 举报
回复
清洁工强悍啊!
王集鹄 2009-05-01
  • 打赏
  • 举报
回复
这样试试:
document.close();
document.open();

var r1=/^(\d+\|)*\d+$/;
var r2=/((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/;
var r3=/[^\d^\|]|^\||\|$|\|\||((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/

var data = ["1", "1|", "|2", "1||2", "1|2", "2|2|3", "1|2|3|31|5", "1|2|3|31|3|5", "1|2|331|5", "2|1|3|31|5|1"];

for(var i = 0; i < data.length; i++) {
var s = data[i];
document.write(s);
document.write("=");
document.write(r1.test(s) && !r2.test(s));
document.write(",");
document.write(!r3.test(s));
document.write("<br/>");
}


1=true,true
1|=false,false
|2=false,false
1||2=false,false
1|2=true,true
2|2|3=false,false
1|2|3|31|5=true,true
1|2|3|31|3|5=false,false
1|2|331|5=true,true
2|1|3|31|5|1=false,false
wcwtitxu 2009-05-01
  • 打赏
  • 举报
回复
也凑凑热闹的

/^(?!.*(\d+)\b.*\|\1\b)\d+(?:\|\d+)*$/.test(s)
-过客- 2009-05-01
  • 打赏
  • 举报
回复
偶然看到伴水回帖,过来凑个热闹,借用一下伴水的代码

<script>
document.close();
document.open();

var r1=/^(\d+\|)*\d+$/;
var r2=/((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/;
var r3=/^(?:(\d+)(?!.*\|\1\b)\|)*\d+$/;

var data = ["1", "1|", "|2", "1||2", "1|2", "2|2|3", "1|2|3|31|5", "1|2|3|31|3|5", "1|2|331|5", "2|1|3|31|5|1"];

for(var i = 0; i < data.length; i++) {
var s = data[i];
document.write(s);
document.write("=");
document.write(r1.test(s) && !r2.test(s));
document.write(",");
document.write(r3.test(s));
document.write("<br/>");
}

</script>


改动了两行
var r3=/^(?:(\d+)(?!.*\|\1\b)\|)*\d+$/;
document.write(r3.test(s));

输出结果同伴水的一样
natineprince 2009-04-30
  • 打赏
  • 举报
回复
请问哪里可以查到\3这类转义的资料啊?
natineprince 2009-04-30
  • 打赏
  • 举报
回复
原来是这样啊...受教了..
cloudgamer 2009-04-30
  • 打赏
  • 举报
回复
后面那个是检测有没有相同项
natineprince 2009-04-30
  • 打赏
  • 举报
回复
1|2|3|31|3

很奇怪...这时好像是FALSE的...
cloudgamer 2009-04-30
  • 打赏
  • 举报
回复
\3是一个引用不是真的3
natineprince 2009-04-30
  • 打赏
  • 举报
回复
意思是必须是
数字|数字|数字|数字
的形式且不能以3为结尾吗?
cloudgamer 2009-04-30
  • 打赏
  • 举报
回复
具体如何呢
paullbm 2009-04-30
  • 打赏
  • 举报
回复
先将r2取反,然后再和r1做'或'连接,拼凑成r
用r去test就行了.
cloudgamer 2009-04-30
  • 打赏
  • 举报
回复
呵呵
不是作品
我也是用别人的控件而已
2009-04-30
  • 打赏
  • 举报
回复
看不懂```

又要发布作品了吧, 期待...

87,904

社区成员

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

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