5

我正在研究 TCL GUI,我从 XML 模式获取 GUI 的数据树结构,并且我必须验证 XML 模式中的限制的输入字段。在我正在使用的 XML 模式中,我有简单的类型 NMTOKEN Name 和 NCName ,它们分别具有模式限制 ' \c+' 、 ' \i\c*' 和 ' [\i-[:]][\c-[:]]*' 。我用来检查的代码是

method validatePatternValue { value } { 
    set patternCheck 1

    set pattern "^($patternValue)\$"
    set patternCheck [regexp $pattern $value]

    if {$patternCheck == 0} {
        tk_messageBox -message "Only Characters within range $patternValue for $patternValueType is\
                                accepted "
        return 0
    } 

    return 1
}

并且每当 $pattern 是这些 ' \c+' 、 ' \i\c*' 和 ' [\i-[:]][\c-[:]]*' 之一时,我的文本字段不接受任何输入并不断抛出错误异常对话。

只是为了添加更多信息,我遇到了这个网站,其中提供了一些关于我关于处理“ \i”和“ \c”组合的问题的好信息。但是除了以下链接中建议的方法之外没有其他方法:XML Schema Character Classes

4

1 回答 1

5

转义序列在 Tcl regexp 中的\c作用与在 XML-Schema regexp 中的作用不同。

在 XML 模式中

\c匹配 XML 名称中第一个字符之后可能出现的任何字符,即[-._:A-Za-z0-9]

在 Tcl 中

\cX(其中 X 为任意字符)低 5 位与 X 相同,其他位全为零的字符

您发送的链接中也明确说明了

请注意,\c 速记语法与许多其他正则表达式风格中使用的控制字符语法冲突。

您应该尝试使用[-.:\w]而不是\c

也是如此\i,它在 Tcl 和 XML 中不一样

于 2012-10-09T07:58:55.283 回答