首页 文章

正则表达式仅限数字

提问于
浏览
248

我根本没有使用正则表达式,所以我很难排除故障 . 我希望正则表达式只在包含的字符串是所有数字时匹配;但是下面的两个例子是匹配一个包含所有数字的字符串加上一个等号“1234 = 4321” . 我确信有一种方法可以改变这种行为,但正如我所说,我从未真正做过正则表达式 .

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

如果重要,我正在使用C#和.NET2.0 .

17 回答

  • 12

    如果你需要检查所有数字是否都是数字(0-9),

    ^[0-9]+$
    

    1425是的

    0142是的

    0正确

    1是的

    154a25否则

    1234 = 3254假

  • 3

    另一种方式:如果您想匹配波斯语或阿拉伯语等国际号码,那么您可以使用以下表达式:

    Regex = new Regex(@"^[\p{N}]+$");
    

    要匹配字面时期字符使用:

    Regex = new Regex(@"^[\p{N}\.]+$");
    
  • 2

    使用开始和结束锚点 .

    Regex regex = new Regex(@"^\d$");
     Use "^\d+$" if you need to match more than one digit.
    
  • 1

    虽然上述解决方案中没有一个符合我的目的,但这对我有用 .

    var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
    return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;
    

    有效值的示例:“3”,“ - 3”,“0”,“0.0”,“1.0”,“0.7”,“690.7”,“0.0001”,“ - 555”,“945465464654”

    无效值的示例:“a”,“”,“”,“ . ”,“ - ”,“001”,“00.2”,“000.5”,“ . 3”,“3 . ”,“ - 1” ,“ - 1”,“ - 1”,“ - 0”,“00099”,“099”

  • -2

    我认为这个是最简单的一个,它接受欧洲和美国的写作方式,例如美国10,555.12欧洲10.555,12此外,这一个不允许一个接一个的逗号或点,例如10..22或10, . 22除了像.55或55之类的数字外,还会通过 . 这可能很方便 .

    ^([,|.]?[0-9])+$
    
  • 10

    如果您只想从字符串中提取数字,则“\ d”模式应该有所帮助 .

  • 409

    使用开始和结束锚点 .

    Regex regex = new Regex(@"^\d$");
    

    如果您需要匹配多个数字,请使用 "^\d+$" .


    请注意, "\d" 将匹配 [0-9] 和其他数字字符,例如东部阿拉伯数字 ٠١٢٣٤٥٦٧٨٩ . 使用 "^[0-9]+$" 将匹配限制为仅阿拉伯数字0 - 9 .


    如果您需要包含除数字之外的任何数字表示(如初学者的十进制值),请参阅@tchristcomprehensive guide to parsing numbers with regular expressions .

  • 30

    您的正则表达式将匹配包含数字的任何内容,您希望使用锚点来匹配整个字符串,然后匹配一个或多个数字:

    regex = new Regex("^[0-9]+$");
    

    ^ 将锚定字符串的开头, $ 将锚定字符串的结尾, + 将匹配其前面的一个或多个(在这种情况下为数字) .

  • 4

    如果你需要容忍小数点和千标记

    var regex = new Regex(@"^-?[0-9][0-9,\.]+$");
    

    如果数字可以为负数,则需要“ - ” .

  • 8

    它是匹配的,因为它找到“匹配”而不是完整字符串的匹配 . 您可以通过更改正则表达式来专门查找字符串的开头和结尾来解决此问题 .

    ^\d+$
    
  • 8

    也许我的方法会帮助你 .

    public static bool IsNumber(string s)
        {
            return s.All(char.IsDigit);
        }
    
  • 11

    这适用于整数和十进制数 . 如果数字具有彗差千分隔符,则不匹配,

    "^-?\\d*(\\.\\d+)?$"
    

    一些与此匹配的字符串:

    894
    923.21
    76876876
    .32
    -894
    -923.21
    -76876876
    -.32
    

    一些没有的字符串:

    hello
    9bye
    hello9bye
    888,323
    5,434.3
    -8,336.09
    87078.
    
  • 14

    ^ \ d $,这是“字符串的开头”,“1位或更多位”,“字符串的结尾”,英文 .

  • 15

    这是我的工作:

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

    还有一些测试

    积极测试:

    string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};
    

    否定测试:

    string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};
    

    不仅检查了C#,还检查了Java,Javascript和PHP

  • 1

    抱歉丑陋的格式化 . 对于任意数量的数字:

    [0-9]*
    

    对于一个或多个数字:

    [0-9]+
    
  • 3

    整数和浮点数的正则表达式:

    ^[+-]?\d*\.\d+$|^[+-]?\d+(\.\d*)?$
    

    数字可以以句点开头(没有前导数字),并且数字可以以句点结尾(没有尾随数字) . 以上正则表达式将识别为正确的数字 . 一个 . (句号)本身没有任何数字不是正确的数字 . 这就是为什么我们需要两个正则表达式部分(用“|”分隔) .

    希望这可以帮助 .

  • 84

    正则表达式正则表达式=新正则表达式(“^ [0-9] {1,4} = [0-9] {1,4] $”)

相关问题