You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式验证跨平台的厚度(Margin/Padding)字符串

使用正则表达式验证跨平台的厚度(Margin/Padding)字符串

嘿,我来帮你搞定这个.NET MAUI里跨平台厚度字符串的正则验证需求!先把咱们要遵循的规则捋得明明白白:

  • 最多支持3组不同平台/设备的厚度配置,每组之间用分号;分隔
  • 单组厚度(不管是Margin还是Padding)必须严格遵循.NET MAUI的Thickness格式,支持三种写法:
    • 通用值:单个数字(整数或小数都可以,比如10、8.5)
    • 水平/垂直值:两个数字用逗号分隔(比如5,10、3.2,6.8)
    • 左/上/右/下值:四个数字用逗号分隔(比如2,4,6,8、1.1,2.2,3.3,4.4)
  • 字符串绝对不能以逗号,或分号;结尾,也不能出现.NET MAUI不支持的三值写法(比如1,2,3这种是无效的)

下面就是专门针对这些规则写的正则表达式:

^(?:\d+(?:\.\d+)?(?:,\d+(?:\.\d+)?){0,1}|\d+(?:\.\d+)?,\d+(?:\.\d+)?,\d+(?:\.\d+)?,\d+(?:\.\d+)?)(?:;(?:\d+(?:\.\d+)?(?:,\d+(?:\.\d+)?){0,1}|\d+(?:\.\d+)?,\d+(?:\.\d+)?,\d+(?:\.\d+)?,\d+(?:\.\d+)?)){0,2}$

我给你拆解下这个正则的逻辑,方便你理解和调整:

  • ^ 和 $:牢牢卡着字符串的开头和结尾,确保整个内容都符合规则,不会有偷偷藏着的多余字符
  • 核心的单组厚度匹配部分:
    • \d+(?:\.\d+)?:匹配单个合法数字,支持整数和小数
    • (?:,\d+(?:\.\d+)?){0,1}:允许跟着0个或1个“逗号+数字”的组合,对应水平/垂直的双值写法
    • 另一分支的\d+(?:\.\d+)?,\d+(?:\.\d+)?,\d+(?:\.\d+)?,\d+(?:\.\d+)?:专门匹配左/上/右/下的四值写法
  • (?:;(?:...)){0,2}:匹配0到2个“分号+单组厚度”的组合,刚好对应最多3组平台配置的要求
  • 所有的(?:...)都是非捕获组,用来分组但不保存匹配结果,能让正则运行得更高效

再给你举几个例子,直观区分合法和非法的字符串:

合法示例

  • 单组通用值:10
  • 单组水平垂直值:5.5,8.2
  • 单组LTRB值:1,2,3,4
  • 两组平台配置:10;5,10
  • 三组平台配置:2;3.5,6;1,2,3,4

非法示例

  • 结尾带分号:10;
  • 结尾带逗号:5,
  • 超过3组配置:1;2;3;4
  • 不支持的三值写法:1,2,3(.NET MAUI的Thickness根本不认这种格式哦)

备注:内容来源于stack exchange,提问作者programmerboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:08:00