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

寻找等效于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:36:44