正则表达式 C#
Regular Expressions C#
我知道有很多关于制作正则表达式的问题,但它们似乎都是关于一个单一的问题而不是一般的用法。我也有一个问题想解决。我曾尝试通过阅读正则表达式来学习,但很快就会变得棘手。这是我的问题:
C#
我需要验证存在于同一表单上的两个文本框。我编写的数学运算可以处理任何浮点数。对于这个特定的应用程序,我知道数字将采用三种格式,否则代表用户会出现错误。例如,如果不小心输入了额外的数字或者输入太早等,我想防止这些错误。
格式如下:“#.####”“##.####”“###.##”其中“#”表示必填数字。以一位或两位整数开头的格式必须有 4 个或更多的尾随数字。我已经将它限制在 8,所以我尝试 lol.The 以三位数整数开头的格式永远不允许小数点后有超过两位数。
这是我迄今为止尝试过的方法。
Regex acceptedInputRegex = new Regex(@"^\b[0-9]{3}.[0-9]{2}|[0-9]{1,2}.[0-9]{4,8}$");
Regex acceptedInputRegex = new Regex(@"^\b\d{3}.\d{2} | \d{1,2}.\d{4,8}$");
我已经尝试过,认为匹配是我想要实现的,好像与我的否定表达式匹配意味着有问题。我两次尝试都没有成功。这是代码:
if (acceptedInputRegex.IsMatch(txtMyTextBox1.Text) || acceptedInputRegex.IsMatch(txtMyTextBox2.Text))
{
} else
{
MessageBox.Show("Numbers are not in the right format", "Invalid Input!");
return;
}
- 我应该使用正则表达式来解决这个问题吗?
- 如果没有,请告诉我你推荐什么。如果是这样,请帮助我更正我的正则表达式。
谢谢。
你很接近,你需要转义点并将备选方案分组,以便 ^
和 $
锚点可以应用于它们:
@"^(?:\d{3}\.\d{2}|\d{1,2}\.\d{4,8})$"
参见regex demo。
详情:
^
- 字符串开头
(?:
- non-capturing group 匹配两个备选方案之一的开始:
\d{3}\.\d{2}
- 3 位数字,.
和 2 位数字
|
- 或
\d{1,2}\.\d{4,8}
- 1 或 2 位数字,.
,4 至 8 位数字
)
- 非捕获组结束
$
- 字符串结尾。
要使 \d
仅匹配 ASCII 数字,请使用 RegexOptions.ECMAScript
选项:
var isValid = Regex.IsMatch(s, @"^(?:\d{3}\.\d{2}|\d{1,2}\.\d{4,8})$", RegexOptions.ECMAScript);
我知道有很多关于制作正则表达式的问题,但它们似乎都是关于一个单一的问题而不是一般的用法。我也有一个问题想解决。我曾尝试通过阅读正则表达式来学习,但很快就会变得棘手。这是我的问题:
C#
我需要验证存在于同一表单上的两个文本框。我编写的数学运算可以处理任何浮点数。对于这个特定的应用程序,我知道数字将采用三种格式,否则代表用户会出现错误。例如,如果不小心输入了额外的数字或者输入太早等,我想防止这些错误。
格式如下:“#.####”“##.####”“###.##”其中“#”表示必填数字。以一位或两位整数开头的格式必须有 4 个或更多的尾随数字。我已经将它限制在 8,所以我尝试 lol.The 以三位数整数开头的格式永远不允许小数点后有超过两位数。
这是我迄今为止尝试过的方法。
Regex acceptedInputRegex = new Regex(@"^\b[0-9]{3}.[0-9]{2}|[0-9]{1,2}.[0-9]{4,8}$");
Regex acceptedInputRegex = new Regex(@"^\b\d{3}.\d{2} | \d{1,2}.\d{4,8}$");
我已经尝试过,认为匹配是我想要实现的,好像与我的否定表达式匹配意味着有问题。我两次尝试都没有成功。这是代码:
if (acceptedInputRegex.IsMatch(txtMyTextBox1.Text) || acceptedInputRegex.IsMatch(txtMyTextBox2.Text))
{
} else
{
MessageBox.Show("Numbers are not in the right format", "Invalid Input!");
return;
}
- 我应该使用正则表达式来解决这个问题吗?
- 如果没有,请告诉我你推荐什么。如果是这样,请帮助我更正我的正则表达式。
谢谢。
你很接近,你需要转义点并将备选方案分组,以便 ^
和 $
锚点可以应用于它们:
@"^(?:\d{3}\.\d{2}|\d{1,2}\.\d{4,8})$"
参见regex demo。
详情:
^
- 字符串开头(?:
- non-capturing group 匹配两个备选方案之一的开始:\d{3}\.\d{2}
- 3 位数字,.
和 2 位数字|
- 或\d{1,2}\.\d{4,8}
- 1 或 2 位数字,.
,4 至 8 位数字
)
- 非捕获组结束$
- 字符串结尾。
要使 \d
仅匹配 ASCII 数字,请使用 RegexOptions.ECMAScript
选项:
var isValid = Regex.IsMatch(s, @"^(?:\d{3}\.\d{2}|\d{1,2}\.\d{4,8})$", RegexOptions.ECMAScript);