我需要检查字符串是否代表有效的名称空间格式。名称空间由用点分隔的ID组成。每个id均以字母字符开头,并以字母数字字符继续。

有效的名称空间:

"com.company.package"
"com.company"
"com"


无效的名称空间:

"1com.company.package"
"com.1company"
"com.com%any"
".com.company"
"com.company."
"com "
" com"
""
"."
"com..company"


当前,我使用此简单的正则表达式,但实际上并不会检查所有这些无效的名称空间:

if( /^[\w\.]$/.test( namespaceStr ) ) {
  //valid namespace
} else {
  //invalid namespace
}


有什么更好的建议,可以采用一种小型高效的方法来检查字符串是否代表有效的名称空间?

这是一个小jsfiddle,可用于测试此正则表达式:http://jsfiddle.net/bA85y/

最佳答案

编辑:这应该适用于每种情况:

/^(?:[a-z]\d*(?:\.[a-z])?)+$/i


如果您不在乎捕获更短的组:

/^([a-z]\d*(\.[a-z])?)+$/i


一点解释:

^ // Start
( // Open group
[a-z]\d* // Must start by letter and may be followed by a number (greedy)
(\.[a-z])? // It may be followed by a dot only if it's followed by a letter (non-greedy)
)+ // Close group and match at least once so we get rid of empty values
$ // Ends, not allow any other characters


演示:http://jsfiddle.net/elclanrs/5hnQV/

10-06 13:55
查看更多