如何使用正则表达式验证前面有零的数字
本文关键字:数字 前面 何使用 正则表达式 验证 | 更新日期: 2023-09-27 17:59:43
我有以下规则:
不允许任何序列的数字开头有4个或更多0。
所以这个数字:
0000438967
将无法通过验证(4个零)
但是这个数字:
0004389678(3个零)
将通过验证。
这个问题的原因是我需要验证我是否做得正确,因为当我在网上注册Regex验证器时,我得到的验证结果好坏参半。我知道这听起来像是一个简单的问题,但其他人的验证很重要。
谢谢Russ
难以置信的审判量&这个问题回答错误!解决方案很简单:
string number = "0000438967";
bool pass = Regex.IsMatch(number, @"^0{0,3}[1-9]'d*$");
这允许任何长度的数字,只要至少有一个非零数字。将最后一个星号替换为{n}或{m,n}以检查长度。
当然,您可能需要构造一个Regex实例以供重复使用。
如果您还需要数值,则可以立即解析pass == true
:
int value = Int32.Parse(number);
当然,根据您想要允许的最大长度,您可能需要Int64
。。。但无论如何,您必须在正则表达式中提供最大长度,否则Parse
可能会导致溢出。
如果必须使用正则表达式,则可以使用负前瞻断言。
^(?!0000)'d+$
查找是零宽度断言。它们不消耗字符串中的任何字符。零宽度点是验证正则表达式是否可以或不能从当前位置向前看或向后看,而不将它们添加到整体匹配中。
示例:
Regex.IsMatch("0438967", @"^(?!0000)'d+$"); // True
Regex.IsMatch("004389678", @"^(?!0000)'d+$"); // True
Regex.IsMatch("000438967", @"^(?!0000)'d+$"); // True
Regex.IsMatch("00004389678", @"^(?!0000)'d+$"); // False
Regex.IsMatch("00000438967", @"^(?!0000)'d+$"); // False
Regex.IsMatch("000000438967", @"^(?!0000)'d+$"); // False
从零到三个零,然后可选地接一个非零数字,然后接任意数量的数字:
0{0,3}([1-9][0-9]*)?
它应该接受:
000
同时拒绝任何开头有4+0的数字。
不要对此使用前瞻性/滞后性,因为这会触发回溯。
编辑:如果你的匹配功能没有执行完全匹配,那么你需要执行:
^0{0,3}([1-9][0-9]*)?$
请尝试此操作。。
string myString = "00011111";//Valid
if (Regex.IsMatch(myString, @"^[0-9]{3}[1-9]+$"))
{
Console.WriteLine("Valid");
Console.ReadKey();
}
假设您不接受任何零,并且至少接受一个非零数字,下面是您的正则表达式:
string str = "001";
bool passed = Regex.IsMatch(str, @"^0{0,3}[1-9]'d*$");
解释:Regex检查0到3'0,然后检查一个非'0'数字,然后检查任何数字中的零个或多个。
如果"000"是可以接受的,那么来自@hwnd的否定前瞻性解决方案会更优雅。我只想使用0{4}
而不是0000
。
您可以使用Regex来查找字符串是否有效
!Regex.Match(str, @"^0000('d+)", RegexOptions.IgnoreCase).Success
这是工作样本rextester