diff --git a/kernel/model/blockial.go b/kernel/model/blockial.go index fb06aa3d1..8c9daed18 100644 --- a/kernel/model/blockial.go +++ b/kernel/model/blockial.go @@ -36,46 +36,6 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) -// validateChars 验证从指定索引开始的字符是否合法(小写字母、数字、连字符) -func validateChars(name string, startIdx, n int) bool { - for i := startIdx; i < n; i++ { - c := name[i] - if c != '-' && (c < 'a' || c > 'z') && (c < '0' || c > '9') { - return false - } - } - return true -} - -// isValidAttrName 验证属性名是否合法 -func isValidAttrName(name string) bool { - n := len(name) - if n == 0 { - return false - } - // 首字符必须是小写字母 - c := name[0] - if c < 'a' || c > 'z' { - return false - } - // 后续字符只能是小写字母、数字、连字符 - if c != 'c' { - return validateChars(name, 1, n) - } - // 首字符是 'c',检查自定义属性 custom- 前缀 - if n >= 7 && name[1] == 'u' && name[2] == 's' && name[3] == 't' && name[4] == 'o' && name[5] == 'm' && name[6] == '-' { - if n == 7 { - return false // 不允许只包含前缀 - } - if c = name[7]; c < 'a' || c > 'z' { - return false // 首字符必须是小写字母 - } - return validateChars(name, 7, n) - } - // 非自定义属性 - return validateChars(name, 1, n) -} - func SetBlockReminder(id string, timed string) (err error) { if !IsSubscriber() { if "ios" == util.Container { @@ -356,3 +316,48 @@ func ResetBlockAttrs(id string, nameValues map[string]string) (err error) { cache.RemoveBlockIAL(id) return } + +// isValidAttrName 验证属性名是否合法 +func isValidAttrName(name string) bool { + n := len(name) + if n == 0 { + return false + } + + // 首字符必须是小写字母 + c := name[0] + if c < 'a' || c > 'z' { + return false + } + + // 后续字符只能是小写字母、数字、连字符 + if c != 'c' { + return validateChars(name, 1, n) + } + + // 首字符是 'c',检查自定义属性 custom- 前缀 + if n >= 7 && name[1] == 'u' && name[2] == 's' && name[3] == 't' && name[4] == 'o' && name[5] == 'm' && name[6] == '-' { + if n == 7 { + return false // 不允许只包含前缀 + } + + if c = name[7]; c < 'a' || c > 'z' { + return false // 首字符必须是小写字母 + } + return validateChars(name, 7, n) + } + + // 非自定义属性 + return validateChars(name, 1, n) +} + +// validateChars 验证从指定索引开始的字符是否合法(小写字母、数字、连字符) +func validateChars(name string, startIdx, n int) bool { + for i := startIdx; i < n; i++ { + c := name[i] + if (c < 'a' || c > 'z') && (c < '0' || c > '9') && c != '-' { + return false + } + } + return true +}