求助正则大佬 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
baba5
V2EX    前端开发

求助正则大佬

  •  
  •   baba5 2022-05-25 10:10:43 +08:00 2715 次点击
    这是一个创建于 1239 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于用了 xrender ,表单字段校验全部得用一个正则来配置完成,遇到了一些困难,求助各位大佬,需求如下(主要是第一个): 49fb7a1f746fd7e49102a91072aa57b 提前感谢。

    第 1 条附言    2022-05-25 10:49:47 +08:00
    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])$


    有没有更好的方案,欢迎大佬指教
    第 2 条附言    2022-05-25 11:09:30 +08:00
    端口号校验更正:

    ^([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])$
    第 3 条附言    2022-05-25 11:47:41 +08:00
    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)))
    第 4 条附言    2022-05-25 12:50:05 +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,})|((?:(?:[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]))?$

    非常感谢评论区各位大佬提供的各种思路和帮助,希望对有相同需求的朋友也有帮助。
    第 5 条附言    2022-05-25 14:57:32 +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,})$

    端口及端口范围校验正则:
    ^([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]))?$
    creanme
        1
    creanme  
       2022-05-25 10:12:55 +08:00
    全部用一个正则会不会有问题?比如第一个输入框要求 0-9, 第二个框 a-z ,如果用一个正则,然后在第一个输入框里面输入 0-9 也能通过?
    baba5
        2
    baba5  
    OP
       2022-05-25 10:16:20 +08:00
    @creanme 我表达得有问题,这是两个字段,需要两个正则,1 和 2 是两个需求。
    sugars
        3
    sugars  
    PRO
       2022-05-25 10:19:54 +08:00   1
    https://regexr.com/3dt4r
    这个可能对你有帮助,虽然无法完美解决你全部需求
    ynyounuo
        4
    ynyounuo      2022-05-25 10:24:52 +08:00
    所以你遇到的困难是什么?就是完全不会做,找个网友帮你写好?
    sugars
        5
    sugars  
    PRO
       2022-05-25 10:26:49 +08:00
    @ynyounuo 确实像是,就算不会,谷歌完全能找到不少类似场景的资料
    比如 ip-range 的方案 https://regex101.com/r/1dg92i/1
    baba5
        6
    baba5  
    OP
       2022-05-25 10:29:04 +08:00
    @sugars 感谢提供思路
    baba5
        7
    baba5  
    OP
       2022-05-25 10:42:23 +08:00
    @ynyounuo 问题就是满足单个的条件都能找到,我组合在一起不对。菜鸟真心求教 QAQ
    Lweiis
        8
    Lweiis  
       2022-05-25 10:50:53 +08:00
    说个笨办法,用 | (or condition) 来组合一下?
    baba5
        9
    baba5  
    OP
       2022-05-25 10:54:39 +08:00
    @Lweiis 我现在就是一个条件一个条件找,然后用 | 组合的 QAQ
    harmless
        10
    harmless  
       2022-05-25 11:00:11 +08:00 via iPhone
    端口范围没法用正则检验前面的数比后面的小
    harmless
        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]))$
    baba5
        12
    baba5  
    OP
       2022-05-25 11:07:05 +08:00
    @harmless 是的
    baba5
        13
    baba5  
    OP
       2022-05-25 11:11:09 +08:00
    @harmless 感谢大佬,比我那个用 | 组合的优雅哈哈
    xiangyuecn
        14
    xiangyuecn  
       2022-05-25 11:37:44 +08:00   1
    原来真有这么沙雕的组件 把正则表达式当万能的了

    教你怎么不用正则:它要正则,你就给一个对象,里面提供一个 test 函数,基本上就能完美绕过限制
    harmless
        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,})$
    xiangyuecn
        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"))
    baba5
        17
    baba5  
    OP
       2022-05-25 12:02:36 +08:00
    @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])(?:-(?:(?:2[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])))?)$
    baba5
        18
    baba5  
    OP
       2022-05-25 12:03:51 +08:00
    @xiangyuecn 666 ,大佬好思路呀,我去试一下
    harmless
        19
    harmless  
       2022-05-25 13:12:27 +08:00
    @baba5 有校验啊,反倒是你这个好像有问题
    harmless
        20
    harmless  
       2022-05-25 13:19:18 +08:00   1
    ic2y
        21
    ic2y  
       2022-05-25 13:35:31 +08:00
    为啥 不能从文本语义的角度分析, 不一定非要使用正则。可以先分解为基础的元数据,分别对元数据分段进行正则校验。
    weixiangzhe
        22
    weixiangzhe  
       2022-05-25 13:40:38 +08:00
    @xiangyuecn 我觉得你这个最好 666
    baba5
        23
    baba5  
    OP
       2022-05-25 14:44:21 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2626 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:29 PVG 23:29 LAX 08:29 JFK 11:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86