在Javascript中验证Java包名的正则表达式
Regular expression to validate a Java package name in Javascript
我想在javascript中使用正则表达式来验证Java包名。
最简单的方法是匹配单词和点的列表,所以我实现了这个regex:(^(?:[a-z_]+(?:'d*[a-zA-Z_]*)*)(?:'.[a-z_]+(?:'d*[a-zA-Z_]*)*)*$)
此正则表达式确保以下内容:
- 包名只能由字母、数字、点和下划线组成。
- 包名必须始终以单词(或下划线)开头,但绝不能以数字或点 开头
- 包名可以可选地包含一个模式序列:一个点,后面跟着一个可以以字母和下划线开头但不能以数字开头的单词。
- 包名必须以非点字符结束。
- 包名必须按照约定以小写字母开头 (Java允许以大写字母开头的包名,即使不鼓励这样做)
这个正则表达式匹配以下包名:
com
com.test
com.test.regex
_com._123
comTest.regEx
和这些包名不匹配:
123
com.
.com
test.123com
test.123_
这是正确的,但对于我的目的来说还不够,因为如果一个单词是 java保留字,我必须使所有包名无效。
让我们以包名为例:
com.test.package
这个包名在我的正则表达式中是有效的,但是单词package
是一个Java保留词,它不能用于Java包名。
有效的包名可以是:
com.test.packageTest
com.test.testpackage
单词package
可以是另一个单词的子字符串,但它不能是点之间的单个单词。
我如何修改我的正则表达式,以便用这些规则添加单个单词的验证,避免使用java保留的单词?
谢谢
我想我已经找到了正则表达式。
我已经建立了这个,它的工作完美:
(?!^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_]*)*)*$)
这个正则表达式确保:
- 包名不能以一个保留字 开头和/或结尾。
- 包名不能包含点 之间的保留词。
我已经测试了:
while1.package2.void3.transient4
相关文章:
- 忽略文件扩展名的正则表达式
- 获取除带有正则表达式的指定类名之外的所有链接
- 正则表达式以匹配逗号分隔的主机名
- 文件扩展名正则表达式的节点参数
- 正则表达式检查正确的扩展名
- 闭包编译器的正则表达式类型
- 主机名的正则表达式
- Javascript 正则表达式将文件名与扩展名匹配
- 正则表达式 JavaScript 图像文件扩展名
- 正则表达式将某些类名替换为 html 文档中的 JavaScript
- JavaScript 中的主机名 url 正则表达式
- Javascript 正则表达式类名问题
- Javascript正则表达式删除扩展名之后的所有内容
- 用于文件扩展名的正则表达式
- 要解析的JavaScript正则表达式:设置正确名称为X=值#注释
- JS:从url获取主机名,正则表达式不工作
- 如何在javascript中使用正则表达式验证文件扩展名
- NPM包到正则表达式
- 从html中获取类名的正则表达式
- 在Javascript中验证Java包名的正则表达式