当前位置: 首页 > 面试题库 >

如何检查字符串是否为有效的XML元素名称?

王飞虎
2023-03-14
问题内容

我需要一个正则表达式或PHP中的函数来验证字符串是否是一个很好的XML元素名称。

表格w3schools:

XML元素必须遵循以下命名规则:

  1. 名称可以包含字母,数字和其他字符
  2. 名称不能以数字或标点符号开头
  3. 名称不能以字母xml(或XML或Xml等)开头
  4. 名称不能包含空格

我可以编写一个基本的正则表达式来检查规则1,2和4,但是它不能解决所有允许的标点符号,也不能解决第三条规则

\w[\w0-9-]

友善更新

这是格式正确的XML元素名称的更权威来源:

名称和令牌

NameStartChar   ::=
    ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] |
    [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | 
    [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | 
    [#x10000-#xEFFFF]

NameChar    ::=
    NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

Name    ::=
    NameStartChar (NameChar)*

还指定了单独的非令牌化规则:

名称以字符串“ xml”开头或任何与((’X’|’x’)(’M’|’m’)(’L’|’l’))匹配的字符串为标准保留在本规范的此版本或将来版本中。


问题答案:

怎么样

/\A(?!XML)[a-z][\w0-9-]*/i

用法:

if (preg_match('/\A(?!XML)[a-z][\w0-9-]*/i', $subject)) {
    # valid name
} else {
    # invalid name
}

说明:

\A  Beginning of the string
(?!XML)  Negative lookahead (assert that it is impossible to match "XML")
[a-z]  Match a non-digit, non-punctuation character
[\w0-9-]*  Match an arbitrary number of allowed characters
/i  make the whole thing case-insensitive


 类似资料:
  • 我的要求是,在web表单上,如果我选择了一些字符串,单击一个按钮,我应该能够知道我选择的字符串是否使用了有效的HTML语法 假设我写了上面的代码,它应该提醒我错误,但它提醒我正确

  • 我在使用Jsoup解析器时遇到困难。如何判断给定的字符串是否是有效的HTML代码? isValid标记为true,因为JSoup首先使用HtmlTreeBuilder:如果仅有html、head或body标记丢失,它会自行添加它们。然后它使用Cleaner类,并根据给定的白名单进行检查。 有没有简单的方法可以检查字符串是否是有效的HTML,而不需要Jsoup尝试将其变成HTML? 我的例子是AJA

  • 在python中,如何检查字符串是否是字符串列表中的元素? 我正在处理的示例数据是: 那么为什么下面代码的结果是"False":

  • 问题内容: 在Python中,有没有办法在尝试解析字符串之前检查字符串是否为有效JSON? 例如,使用Facebook Graph API之类的东西时,有时返回JSON,有时可能返回图像文件。 问题答案: 您可以尝试执行,如果您传递的字符串无法解码为JSON ,则会抛出。 通常,针对这种情况的“ Pythonic ”哲学称为EAFP,因为它 比许可更容易寻求宽恕 。

  • 问题内容: 我正在寻找Java代码来检查字符串是否为有效的XML。 问题答案: 用正则表达式验证XML是不可能的。XML不是常规语言。 使用XML解析器尝试将字符串解析为XML,或者对照模式(例如DTD或XSD文件)验证XML文档。

  • 问题内容: 我不想计算文件的校验和,只是想知道给定的字符串是否是有效的校验和 问题答案: SHA1验证程序: MD5验证程序: