Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中验证Java包名称的正则表达式_Javascript_Java_Regex_Validation - Fatal编程技术网

在Javascript中验证Java包名称的正则表达式

在Javascript中验证Java包名称的正则表达式,javascript,java,regex,validation,Javascript,Java,Regex,Validation,我想在javascript中使用正则表达式来验证Java包名称 最简单的方法是匹配单词和点的列表,因此我实现了以下正则表达式: (^(?:[a-z_]+(?:\d*[a-zA-Z_]*)*)(?:\.[a-z_]+(?:\d*[a-zA-Z_]*)*)*$) 该正则表达式确保以下内容: 软件包名称只能由字母、数字、点和下划线组成 软件包名称必须始终以单词(或底卷)开头,但不能以数字或点开头 包名称可以选择性地包含由以下内容组成的模式序列:一个点,后跟一个可以以字母和下划线开头但不能以数字开头的

我想在javascript中使用正则表达式来验证Java包名称

最简单的方法是匹配单词和点的列表,因此我实现了以下正则表达式:

(^(?:[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_
    
    而且它与这些包名不匹配:

    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
    

    它很有效。

    我想我找到了正则表达式

    我建造了这个,它工作得非常完美:

    (?!^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
    

    它是有效的。

    将帮助您您可能需要使用负面外观标题,以及大量负面外观标题来覆盖所有Java关键字。我更喜欢使用字符串操作和正则表达式的组合。保留您当前的正则表达式,但在点上拆分,并检查每一部分不是关键字。是的,这是一个实践解决方案:检查每个术语是否都是保留字。直接在正则表达式中进行此检查可能太复杂了。@Tim感谢您的帮助。我自己发现了一个有效的正则表达式,如果您愿意,请检查它。;)这将对您有所帮助您可能需要使用负面外观标题和大量负面外观标题来覆盖所有Java关键字。我更喜欢使用字符串操作和正则表达式的组合。保留您当前的正则表达式,但在点上拆分,并检查每一部分不是关键字。是的,这是一个实践解决方案:检查每个术语是否都是保留字。直接在正则表达式中进行此检查可能太复杂了。@Tim感谢您的帮助。我自己发现了一个有效的正则表达式,如果您愿意,请检查它。;)这不是我见过的最易维护的代码,但对于让它正常工作很有帮助:-)是的,我知道。。。副作用是,在正则表达式中直接存在java保留项的常量。这不是我见过的最易维护的代码,但对于让它工作很有帮助:-)是的,我知道。。。副作用是,在正则表达式中直接存在java保留项的常量。