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