Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Java 使用正则表达式验证数字输入_Java_Regex - Fatal编程技术网

Java 使用正则表达式验证数字输入

Java 使用正则表达式验证数字输入,java,regex,Java,Regex,我试图用Java创建一个正则表达式,以验证具有以下约束的数字: 数字可以是任意长度,但只能包含数字 第一个数字可以是0-9 后续数字可以是0-9,但其中一个数字必须为非零 例如:042004359有效,但0000000000无效 \\d+[1-9]\\d*应该行得通。我想\\d+[1-9]\\d*应该行得通 ^(\d{1})(\d*?[1-9]{1}\d*)*$ ^(\d{1})-行必须以1位数字开头 (\d*?[1-9]{1}\d*)*$-行必须以零或多个0-9位(保守)结尾,然后是1-9位

我试图用Java创建一个正则表达式,以验证具有以下约束的数字:

  • 数字可以是任意长度,但只能包含数字
  • 第一个数字可以是0-9
  • 后续数字可以是0-9,但其中一个数字必须为非零

  • 例如:
    042004359
    有效,但
    0000000000
    无效

    \\d+[1-9]\\d*
    应该行得通。我想
    \\d+[1-9]\\d*
    应该行得通

    ^(\d{1})(\d*?[1-9]{1}\d*)*$
    
    ^(\d{1})-行必须以1位数字开头
    (\d*?[1-9]{1}\d*)*$-行必须以零或多个0-9位(保守)结尾,然后是1-9位,然后是零或多个数字。此模式可以重复零次或多次

    与以下机构合作:

    100000
    100100
    1010200
    1
    二,

    也许这太复杂了,哈哈

    ^(\d{1})-行必须以1位数字开头
    (\d*?[1-9]{1}\d*)*$-行必须以零或多个0-9位(保守)结尾,然后是1-9位,然后是零或多个数字。此模式可以重复零次或多次

    与以下机构合作:

    100000
    100100
    1010200
    1
    二,


    也许这太复杂了,哈哈。

    这应该满足你的需要:

    /^(?=.*[1-9])([0-9]+)$/
    
    虽然它匹配所有的数字[0-9],但它包含一个确保至少有一个[1-9]

    我相当肯定Java允许使用lookaheads

    编辑:这似乎意味着它可以

    编辑:如果0有效,则可以使用:

    ^((?=.*[1-9])([0-9]+)|0)$
    

    这将单独为0设置一个例外(请注意OR运算符)。

    这将满足您的需要:

    /^(?=.*[1-9])([0-9]+)$/
    
    虽然它匹配所有的数字[0-9],但它包含一个确保至少有一个[1-9]

    我相当肯定Java允许使用lookaheads

    编辑:这似乎意味着它可以

    编辑:如果0有效,则可以使用:

    ^((?=.*[1-9])([0-9]+)|0)$
    

    这将使0本身成为例外(请注意OR运算符)。这里有一个使用lookarounds的解决方案:
    (?这里有一个使用lookarounds的解决方案:
    (?请留下downvoteIs
    0
    有效的原因?您说数字可以是任意长度,第一个数字可以是0-9,并在涉及“后续数字”的句子中应用“其中一个数字必须非零”的限制,但似乎您希望所有零位数字都无效。根据@Keppil对LouisWasserman下面答案的评论,#3是否打算限制后面的数字至少有一个非零位,即使第一个数字是非零位?请留下downvoteIs
    0
    有效的原因?您说数字可以是任何长度th和第一个数字可以是0-9,并在涉及“后续数字”的句子中应用“其中一个数字必须非零”的限制,但似乎您希望所有的零位数都无效。根据@Keppil对LouisWasserman下面答案的评论,#3是否打算限制后面的数字至少有一个非零位数,即使第一个数字不是零?将第一个
    *
    更改为
    +
    ,您就到家了。实际上,我不同意。如果我将第一个
    *
    更改为
    +
    ,那么这将只接受至少有两位数字的数字,我认为这是不正确的。(目前,
    [1-9]
    是强制性的,因此必须至少有一位数字。)根据规范,第一个数字后面的一个数字必须是非零的,但您的模式接受
    10000
    例如。这也意味着该数字的长度至少为2.Hrrrrm。我将规范理解为“整个字符串中的一个数字必须非零,”但我认为阅读更有意义。把第一个
    *
    改成
    +
    ,你就到家了。事实上,我不同意。如果我把第一个
    *
    改成
    +
    ,那么这将只接受至少有两位数字的数字,我认为这是不正确的。(目前,
    [1-9]
    是强制性的,因此强制至少有一个数字存在。)根据规范,第一个数字后面的一个数字必须非零,但您的模式接受
    10000
    例如。这也意味着该数字的长度至少为2.Hrrrrm。我将规范解读为“整个字符串中的一个数字必须是非零的,”但我认为读取更有意义。