由于用了 xrender ,表单字段校验全部得用一个正则来配置完成,遇到了一些困难,求助各位大佬,需求如下(主要是第一个): 提前感谢。
1
creanme 2022-05-25 10:12:55 +08:00
全部用一个正则会不会有问题?比如第一个输入框要求 0-9, 第二个框 a-z ,如果用一个正则,然后在第一个输入框里面输入 0-9 也能通过?
|
3
sugars 2022-05-25 10:19:54 +08:00 1
https://regexr.com/3dt4r
这个可能对你有帮助,虽然无法完美解决你全部需求 |
4
ynyounuo 2022-05-25 10:24:52 +08:00
所以你遇到的困难是什么?就是完全不会做,找个网友帮你写好?
|
5
sugars 2022-05-25 10:26:49 +08:00
|
8
Lweiis 2022-05-25 10:50:53 +08:00
说个笨办法,用 | (or condition) 来组合一下?
|
10
harmless 2022-05-25 11:00:11 +08:00 via iPhone
端口范围没法用正则检验前面的数比后面的小
|
11
harmless 2022-05-25 11:07:05 +08:00 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]))?$ |
14
xiangyuecn 2022-05-25 11:37:44 +08:00 1
原来真有这么沙雕的组件 把正则表达式当万能的了
教你怎么不用正则:它要正则,你就给一个对象,里面提供一个 test 函数,基本上就能完美绕过限制 |
15
harmless 2022-05-25 11:45:02 +08:00
校验 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,})$ |
16
xiangyuecn 2022-05-25 12:00:38 +08:00 1
//奇丑无比的超长正则表达式,巨难维护
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")) |
17
baba5 OP @harmless 大佬这个好像没有网段校验,我在你的基础上加上了网段校验
^(?:(?:(?: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])))?)$ |
18
baba5 OP @xiangyuecn 666 ,大佬好思路呀,我去试一下
|
20
harmless 2022-05-25 13:19:18 +08:00 1
|
21
ic2y 2022-05-25 13:35:31 +08:00
为啥 不能从文本语义的角度分析, 不一定非要使用正则。可以先分解为基础的元数据,分别对元数据分段进行正则校验。
|
22
weixiangzhe 2022-05-25 13:40:38 +08:00
@xiangyuecn 我觉得你这个最好 666
|