寻找等效于SymbolUtilityServices.ValidateSymbolName的RegularExpressionAttribute
用正则表达式实现AutoCAD符号名验证(替代SymbolUtilityServices.ValidateSymbolName)
我来帮你搞定这个问题!AutoCAD里的符号表项(比如块、图层、标注样式这类)名称有严格的规范,我们可以把这些规范转化为正则表达式,直接用在[RegularExpression]属性里,彻底避开抛出异常的麻烦。
先明确AutoCAD有效符号名的核心规则
- 不能包含这些特殊字符:
< > / \ " : ; ? * | = , - 不能以空格开头或结尾
- 不能是空字符串
- 最大长度为255个字符(这个可以搭配
[StringLength]属性一起用,或者整合到正则里)
对应的正则表达式
基础验证(不含长度限制)
^(?![\s])[^<>/\\":;?*|=,]+(?<![\s])$
包含长度限制(1-255字符)
^(?![\s])[^<>/\\":;?*|=,]{1,255}(?<![\s])$
正则拆解说明
^:匹配字符串的起始位置(?![\s]):正向预查,确保开头不是空格[^<>/\\":;?*|=,]+:匹配一个或多个不包含禁用特殊字符的任意字符(?<![\s]):反向预查,确保结尾不是空格$:匹配字符串的结束位置{1,255}:限制字符数量在1到255之间
实际代码示例(C# DataAnnotations)
把正则用在模型属性上,搭配错误提示:
using System.ComponentModel.DataAnnotations; public class CadSymbolDefinition { // 带长度限制的正则验证 [RegularExpression(@"^(?![\s])[^<>/\\\"":;?*|=,]{1,255}(?<![\s])$", ErrorMessage = "无效的AutoCAD符号名:不能包含<>/\\\"\":;?*|=,这些字符,不能以空格开头/结尾,且长度不能超过255")] public string BlockName { get; set; } // 基础验证+单独的长度限制 [RegularExpression(@"^(?![\s])[^<>/\\\"":;?*|=,]+(?<![\s])$", ErrorMessage = "无效的AutoCAD图层名:不能包含<>/\\\"\":;?*|=,这些字符,不能以空格开头/结尾")] [StringLength(255, ErrorMessage = "图层名长度不能超过255个字符")] public string LayerName { get; set; } }
这个正则完全对齐SymbolUtilityServices.ValidateSymbolName的验证逻辑,你可以测试各种边界情况(比如空格开头、含禁用字符、空值),都会被正确拦截。
内容的提问来源于stack exchange,提问作者CAD.Dev
相关产品推荐
相关产品推荐

