首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式以验证Javascript中的Java包名

问正则表达式以验证Javascript中的Java包名
EN

Stack Overflow用户
提问于 2016-09-02 10:16:57
回答 1查看 2.7K关注 0票数 1

我希望在javascript中使用正则表达式来验证Java包名。

最简单的方法是匹配一个单词和点的列表,所以我实现了这个正则表达式:

代码语言:javascript
复制
(^(?:[a-z_]+(?:\d*[a-zA-Z_]*)*)(?:\.[a-z_]+(?:\d*[a-zA-Z_]*)*)*$)

这一准则确保了以下内容:

  1. 包名只能由字母、数字、点和下划线组成。
  2. 包名必须始终以单词(或下面的字符)开头,但绝不能以数字或点开头。
  3. 包名还可以包含由:一个点组成的模式序列,后面跟着一个可以以字母和下划线开头的单词,但不能以数字开头。
  4. 包名必须始终以非点号字符结束。
  5. 包名必须按照约定以小写字母开头(即使不鼓励使用大写字母,也允许大写字母开始包名)

例如,这个regex匹配这些包名:

代码语言:javascript
复制
com
com.test
com.test.regex
_com._123
comTest.regEx

而且它与这些包名不匹配:

代码语言:javascript
复制
123
com.
.com
test.123com
test.123_

这是正确的,但就我的目的而言,这还不够,因为如果一个单词是Java保留的单词,我必须使all包名无效。

让我们以这个包名为例:

代码语言:javascript
复制
com.test.package

这个包名在我的regex中被确认为有效,但是单词package是一个Java保留的单词,它不能用于Java名称。

有效的包名可以是:

代码语言:javascript
复制
com.test.packageTest
com.test.testpackage

单词package可以是另一个单词的子字符串,但它不能是点之间的一个单词。

我如何修改正则表达式,以便使用这些规则添加单个单词的验证,从而避免使用Java保留的单词?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-09-05 13:03:13

我想我找到了大梁。

我建造了这个,它工作得很好:

代码语言:javascript
复制
(?!^abstract$|^abstract\..*|.*\.abstract\..*|.*\.abstract$|^assert$|^assert\..*|.*\.assert\..*|.*\.assert$|^boolean$|^boolean\..*|.*\.boolean\..*|.*\.boolean$|^break$|^break\..*|.*\.break\..*|.*\.break$|^byte$|^byte\..*|.*\.byte\..*|.*\.byte$|^case$|^case\..*|.*\.case\..*|.*\.case$|^catch$|^catch\..*|.*\.catch\..*|.*\.catch$|^char$|^char\..*|.*\.char\..*|.*\.char$|^class$|^class\..*|.*\.class\..*|.*\.class$|^const$|^const\..*|.*\.const\..*|.*\.const$|^continue$|^continue\..*|.*\.continue\..*|.*\.continue$|^default$|^default\..*|.*\.default\..*|.*\.default$|^do$|^do\..*|.*\.do\..*|.*\.do$|^double$|^double\..*|.*\.double\..*|.*\.double$|^else$|^else\..*|.*\.else\..*|.*\.else$|^enum$|^enum\..*|.*\.enum\..*|.*\.enum$|^extends$|^extends\..*|.*\.extends\..*|.*\.extends$|^final$|^final\..*|.*\.final\..*|.*\.final$|^finally$|^finally\..*|.*\.finally\..*|.*\.finally$|^float$|^float\..*|.*\.float\..*|.*\.float$|^for$|^for\..*|.*\.for\..*|.*\.for$|^goto$|^goto\..*|.*\.goto\..*|.*\.goto$|^if$|^if\..*|.*\.if\..*|.*\.if$|^implements$|^implements\..*|.*\.implements\..*|.*\.implements$|^import$|^import\..*|.*\.import\..*|.*\.import$|^instanceof$|^instanceof\..*|.*\.instanceof\..*|.*\.instanceof$|^int$|^int\..*|.*\.int\..*|.*\.int$|^interface$|^interface\..*|.*\.interface\..*|.*\.interface$|^long$|^long\..*|.*\.long\..*|.*\.long$|^native$|^native\..*|.*\.native\..*|.*\.native$|^new$|^new\..*|.*\.new\..*|.*\.new$|^package$|^package\..*|.*\.package\..*|.*\.package$|^private$|^private\..*|.*\.private\..*|.*\.private$|^protected$|^protected\..*|.*\.protected\..*|.*\.protected$|^public$|^public\..*|.*\.public\..*|.*\.public$|^return$|^return\..*|.*\.return\..*|.*\.return$|^short$|^short\..*|.*\.short\..*|.*\.short$|^static$|^static\..*|.*\.static\..*|.*\.static$|^strictfp$|^strictfp\..*|.*\.strictfp\..*|.*\.strictfp$|^super$|^super\..*|.*\.super\..*|.*\.super$|^switch$|^switch\..*|.*\.switch\..*|.*\.switch$|^synchronized$|^synchronized\..*|.*\.synchronized\..*|.*\.synchronized$|^this$|^this\..*|.*\.this\..*|.*\.this$|^throw$|^throw\..*|.*\.throw\..*|.*\.throw$|^throws$|^throws\..*|.*\.throws\..*|.*\.throws$|^transient$|^transient\..*|.*\.transient\..*|.*\.transient$|^try$|^try\..*|.*\.try\..*|.*\.try$|^void$|^void\..*|.*\.void\..*|.*\.void$|^volatile$|^volatile\..*|.*\.volatile\..*|.*\.volatile$|^while$|^while\..*|.*\.while\..*|.*\.while$)(^(?:[a-z_]+(?:\d*[a-zA-Z_]*)*)(?:\.[a-z_]+(?:\d*[a-zA-Z_]*)*)*$)

这一准则确保:

  1. 包名不能以单个保留字开始和/或结束。
  2. 包名不能包含点之间的保留项。

我用以下方法进行了测试:

代码语言:javascript
复制
while1.package2.void3.transient4

而且起作用了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39289986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档