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

我需要一个正则表达式或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

以上是 如何检查字符串是否为有效的XML元素名称? 的全部内容, 来源链接: utcz.com/qa/401689.html

回到顶部