如何为仅包含0-9数字、逗号、句点、加号、减号和空格的数字字符串创建正则表达式

本文关键字:数字 空格 正则表达式 创建 字符串 数字字符 句点 包含 逗号 加号 | 更新日期: 2023-09-27 18:20:59

除了空间之外,我有一个适用于所有内容的,效果很好:

new Regex("[^0-9-+,.'r]");

但增加空间似乎是个问题。除此之外,我不需要任何有效性检查。

如何为仅包含0-9数字、逗号、句点、加号、减号和空格的数字字符串创建正则表达式

在我看来,这就像你想要的(警告:未经测试)

new Regex("[''d-''+,''.''s+]+");

您的正则表达式几乎匹配所有不需要的内容,因为^否定字符类中的符号。它匹配除数字、逗号、句点、连字符、加号和回车以外的所有符号。

请注意,回车并不是所有可以与's匹配的空格。如果不希望匹配换行符,请使用'p{Zs}而不是's

如何为仅包含0-9数字、逗号、句点、加号、减号和空格的数字字符串创建正则表达式?

如果您需要匹配一个可能为空的完整字符串:

^[0-9,.+'s-]*$

请参阅regex演示。如果一个字符串应该至少包含一个符号,请使用^[0-9,.+'s-]+$(注意末尾的+量词)。

Regex细分:

  • ^-字符串的开头
  • [0-9,.+'s-]*-0个或多个符号。。。
    • 0-9-一位数字
    • ,-逗号
    • .-一个点
    • +-文字加号
    • 's-任意(也是Unicode)空白
    • -—文字连字符(减号)
  • $—字符串结束

在C#中,

var rx = new Regex(@"^[0-9,.+'s-]*$");

在逐字逐句的字符串文字中,您不必对反斜杠进行转义,因为它们被视为文字。

如果您计划删除所有符号,以便保留数字、句点、逗号、连字符和加号,只需将其取反并删除锚点:

[^0-9,.+'s-]+

请参阅另一个regex演示

只需在此处添加Regex的替代方案,您还可以使用LINQ

public static bool ContainsOnlyAllowedChars(string str, string charsAllowed = "0123456789,.+- ")
{
    return str.All(c => charsAllowed.Contains(c));
}

使用

string myInput = "4,.";
Console.WriteLine(ContainsOnlyAllowedChars(myInput)); //outputs true
myInput = "a4,.";
Console.WriteLine(ContainsOnlyAllowedChars(myInput)); //outputs false

最终的解决方案:

private static bool IsTextNumeric(string text)
    {
        Regex regex = new Regex(@"[^0-9-+,.'s]");// regex that matches disallowed text
        return !regex.IsMatch(text);
    }

While ''s包含''r。