使用正则表达式验证跨平台的厚度(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
相关产品推荐
相关产品推荐

