求助正则大佬
由于用了 xrender ,表单字段校验全部得用一个正则来配置完成,遇到了一些困难,求助各位大佬,需求如下(主要是第一个): 提前感谢。
2. 端口检查的:^([1-9]|[1-9]\\d{1,3}|[1-6][0-5][0-5][0-3][0-5])$|^([1-9]|[1-9]\\d{1,3}|[1-6][0-5][0-5][0-3][0-5])-([1-9]|[1-9]\\d{1,3}|[1-6][0-5][0-5][0-3][0-5])$
有没有更好的方案,欢迎大佬指教 端口号校验更正:
^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$|^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])-([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$ ip 、ip 范围、网段及域名校验:
(^((?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?:(\/([1-9]|[1-2]\d|3[0-1]))|(\-((?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))))?)|((?:(?:[a-zZ-Z0-9]+)\.){2}((com|org|net)\.)?(com|cn|net|org|biz|info|cc|tv|top|vip))) ip 、ip 范围、网段及域名校验正则:
^(?:(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(?:-(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|(?:[0-9]|[1-2][0-9]|3[0-2]))?|(?:[a-z0-9]+(?:-[a-z0-9]+)*\.)+[a-z]{2,})|((?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?:(\/([1-9]|[1-2]\d|3[0-1])))?)$
端口及端口范围校验正则:
^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:-([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$
非常感谢评论区各位大佬提供的各种思路和帮助,希望对有相同需求的朋友也有帮助。 ip 、ip 范围、网段及域名校验正则:
^(?:(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(?:-(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|\/(?:[0-9]|[1-2][0-9]|3[0-2]))?|(?:[a-z0-9]+(?:-[a-z0-9]+)*\.)+[a-z]{2,})$
端口及端口范围校验正则:
^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:-([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$ ----------------------- 以下是精选回复-----------------------
答:全部用一个正则会不会有问题?比如第一个输入框要求 0-9, 第二个框 a-z ,如果用一个正则,然后在第一个输入框里面输入 0-9 也能通过?
答:https://regexr.com/3dt4r
这个可能对你有帮助,虽然无法完美解决你全部需求
答:所以你遇到的困难是什么?就是完全不会做,找个网友帮你写好?
答:说个笨办法,用 | (or condition) 来组合一下?
答:端口范围没法用正则检验前面的数比后面的小
答:如果不要求前面的端口号一定比后面的小可以用这个
^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:-([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$
答:原来真有这么沙雕的组件 把正则表达式当万能的了
教你怎么不用正则:它要正则,你就给一个对象,里面提供一个 test 函数,基本上就能完美绕过限制
答:校验 IP 、IP 段和域名
^(?:(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(?:-(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|/(?:[0-9]|[1-2][0-9]|3[0-2]))?|(?:[a-z0-9]+(?:-[a-z0-9]+)*\.)+[a-z]{2,})$
答://奇丑无比的超长正则表达式,巨难维护
exp=/.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|./;
console.log(exp.test("123-456"))
console.log(exp.test("456-123"))
//用函数伪装正则表达式,要 match 就加一个 match 函数
exp={
test:function(str){
var arr=str.split("-")
var t=function(s){//测试单个端口
var v=+s||0;
return ""+v == s && v>=0 && v<=65535
}
if(arr.length==1){
return t(arr[0])
}else if(arr.length==2){
//左边端口不能大于右边端口
return t(arr[0]) && t(arr[1]) && +arr[0]<=+arr[1]
}
return false
}
}
console.log(exp.test("abc-efg"))
console.log(exp.test("999999"))
console.log(exp.test("456-123"))
console.log(exp.test("123-456789"))
console.log(exp.test("123-456"))
答:为啥 不能从文本语义的角度分析, 不一定非要使用正则。可以先分解为基础的元数据,分别对元数据分段进行正则校验。
0条评论