代码之家  ›  专栏  ›  技术社区  ›  Timothy Carter

仅适用于数字的正则表达式

  •  256
  • Timothy Carter  · 技术社区  · 17 年前

    我根本没有使用过正则表达式,所以我很难排除故障。我希望正则表达式仅在包含的字符串为所有数字时匹配;但在下面的两个示例中,它匹配的字符串包含所有数字加上等号,如“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 回复  |  直到 6 年前
        1
  •  567
  •   Community Mohan Dere    8 年前

    使用开始和结束锚定。

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

    "^\d+$" 如果您需要匹配多个数字。


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


    如果您需要包括除数字以外的任何数字表示形式(如十进制值),请参阅 @tchrist comprehensive guide to parsing numbers with regular expressions .

        2
  •  122
  •   TazGPL    12 年前

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

    这个 ^ $ 将锚定字符串的末端,以及 + 将匹配前面的一个或多个内容(本例中为数字)。

        3
  •  47
  •   Community Mohan Dere    7 年前

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

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

    如果数字可能为负数,则需要一个“-”。

        4
  •  20
  •   kasperjj    17 年前

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

    ^\d+$
    
        5
  •  19
  •   Rezo Megrelidze    12 年前

    也许我的方法会对你有所帮助。

        public static bool IsNumber(string s)
        {
            return s.All(char.IsDigit);
        }
    
        6
  •  19
  •   Daniele D.    9 年前

    这适用于整数和十进制数。如果数字有分隔符,则不匹配,

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

    与此匹配的某些字符串:

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

    某些字符串不能:

    hello
    9bye
    hello9bye
    888,323
    5,434.3
    -8,336.09
    87078.
    
        7
  •  12
  •   fnc12    12 年前

    对不起,格式很难看。 对于任意位数:

    [0-9]*
    

    对于一个或多个数字:

    [0-9]+
    
        8
  •  12
  •   Maicon Mauricio    4 年前

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

    ^[0-9]+$
    

    比赛

    1425
    0142
    0
    1
    

    而且不匹配

    154a25
    1234=3254
    
        9
  •  11
  •   Mark Brackett    17 年前

    ^\d+$,英语中的“字符串开始”、“1个或多个数字”、“字符串结束”。

        10
  •  11
  •   Marina    10 年前

    这是我的作品:

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

        11
  •  7
  •   Oli Folkerd    5 年前

    使用开始和结束锚定。

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

    "^\d+$" 如果您需要匹配多个数字。

        12
  •  7
  •   tripleee    4 年前

    虽然上述解决方案中没有一个符合我的目的,但这对我来说是可行的。

    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"
    
        13
  •  6
  •   S.M.Mousavi    14 年前

    另一种方法:如果您喜欢匹配国际数字,如波斯语或阿拉伯语,则可以使用以下表达式:

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

    Regex = new Regex(@"^[\p{N}\.]+$");
    
        14
  •  5
  •   Tagar    5 年前

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

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

    数字可以以句点开头(无前导数字), 上面的正则表达式将两者识别为正确的数字。

    A.(句点)本身不带任何数字不是正确的数字。 这就是为什么我们需要两个regex部分(用“|”分隔)。

    希望这有帮助。

        15
  •  3
  •   Azur    9 年前

    我认为这是最简单的一个,它接受欧洲和美国的数字书写方式,例如美国10555.12欧洲10.555,12 除此之外,如.55或,55将通过。这可能很方便。

    ^([,|.]?[0-9])+$
    
        16
  •  2
  •   James Selvakumar    15 年前

        17
  •  1
  •   Chathuranga Kasthuriarachchi    5 年前
     console.log(/^(0|[1-9][0-9]*)$/.test(3000)) // true
    
        18
  •  1
  •   Programmer    4 年前

    以下正则表达式只接受英语和阿拉伯语(波斯语)语言中的数字(也是浮点)(就像Windows计算器一样):

    ^((([0\u0660\u06F0]|([1-9\u0661-\u0669\u06F1-\u06F9][0\u0660\u06F0]*?)+)(\.)[0-9\u0660-\u0669\u06F0-\u06F9]+)|(([0\u0660\u06F0]?|([1-9\u0661-\u0669\u06F1-\u06F9][0\u0660\u06F0]*?)+))|\b)$
    

    11
    1.2
    0.3
    Û±Û²
    Û±.Û³
    Û°.Û²
    Û².Û·
    

    上述正则表达式不接受以下模式:

    3.
    .3
    0..3
    .Û±Û²
    
        19
  •  0
  •   Yawar Ali    4 年前

    要检查字符串是否为uint、ulong或仅包含一个(点)和数字 样本输入

    Regex rx = new Regex(@"^([1-9]\d*(\.)\d*|0?(\.)\d*[1-9]\d*|[1-9]\d*)$");
    string text = "12.0";
    var result = rx.IsMatch(text);
    Console.WriteLine(result);
    

    样品

    123 => True
    123.1 => True
    0.123 => True
    .123 => True
    0.2 => True
    3452.434.43=> False
    2342f43.34 => False
    svasad.324 => False
    3215.afa => False
    
        20
  •  -4
  •   Giri babu vuppula    11 年前

    Regex Regex=newregex(“^[0-9]{1,4}=[0-9]{1,4]$”)