C# 如何为Regex.ismatch函数提供正则表达式?
我正在尝试编写一个正则表达式来接受长度不超过14的数字,如果它们保留小数点,那么它应该只接受小数点后的2个数字 我已通过以下链接尝试过: 但是,同一个Regex.IsMatch函数不接受以^开头、以$结尾的普通正则表达式 请在这方面帮助我,我对正则表达式不熟悉C# 如何为Regex.ismatch函数提供正则表达式?,c#,regex,C#,Regex,我正在尝试编写一个正则表达式来接受长度不超过14的数字,如果它们保留小数点,那么它应该只接受小数点后的2个数字 我已通过以下链接尝试过: 但是,同一个Regex.IsMatch函数不接受以^开头、以$结尾的普通正则表达式 请在这方面帮助我,我对正则表达式不熟悉 private void ChangedSellUp_KeyDown(object sender, KeyEventArgs e) { string pattern = "^[0-9]*$
private void ChangedSellUp_KeyDown(object sender, KeyEventArgs e)
{
string pattern = "^[0-9]*$";
Regex rx = new Regex(pattern);
if (rx.IsMatch(ChangedSellUp.Text))
{
e.Handled = true;
}
}
这里ChangedSellup.Text是我的文本框值,我试图根据两个条件限制该值
请帮我处理regex???这里是regex.IsMatch,它可以满足您的需要:
Regex.IsMatch("12345678901234.12", @"^\d{1,14}(?:\.\d{1,2}){0,1}$")
该特定正则表达式用于小数点前14位和小数点后1或2位的数字(整个小数部分是可选的)
测试它的好地方是:
因为您提到了^和$,所以我将它们包含在正则表达式中,它将只解析带有数字的行(因此,例如“1234.12”在IsMatch中不会返回true,如果这不重要,只需删除“^”和“$”)
regex的另一个好资源是:
更新:
由于目标是用户只能在文本框中编写满足正则表达式的内容,因此可以在文本更改事件中执行此操作(向下键不是一个好选项,因为您必须将KeyEventArg的键转换为字符)。因此,实现您所需的最简单方法是:
private void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
if (!Regex.IsMatch(TextBox1.Text, @"^\d{1,14}(?:\.\d{0,2}){0,1}$"))
{
TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - e.Changes.Last().AddedLength);
TextBox1.CaretIndex = TextBox1.Text.Length;
}
}
请注意正则表达式中的细微变化,它将接受一个后跟一个点的数字,没有额外的数字,这是因为当您编写一个带小数位数的数字时,您将处于一种发生这种情况的状态,例如:“123”。构建正则表达式的最佳方法是使用正则表达式测试仪。有一个非常好的,你可以下载叫做Cappucino的,或者你可以使用网络的,我喜欢 那么这只是构建正则表达式的一个例子,我正在测试
12345678901344.00
如果您以数字的正则表达式模式\d
开始,那么您将获得预期的所有16个匹配项
添加一个缩写为一个或多个的+
,以便\d+
匹配两次1234567890134
和00
如果将范围限制为仅两位数,即\d{2}
,则得到8对数字
要添加
您需要转义字符,因为
是一种匹配任何数字的模式,因此请改用\。\d{2}
仅匹配.00
(这是数字的可选部分)
如果模式匹配长度介于1和14之间的数字范围\d{1,14}
,则将匹配1234567890134
(主数字)和00
现在你可以把它放在一起了,我们让小数点后的部分成为可选的,我们想让它0或1次{0,1}
,或者用一个速记变量?
来给出
\d{1,14}(\.\d{2})?
哪一个匹配正确
12345678901234.00
123456.00
1
1234
因为我不匹配行的开始和结束,所以也匹配这些
500.00USD
$1000
请显示导致问题的确切代码,而不是指向其他答案的链接。另外,请告诉我们发生了什么错误?你怎么知道它工作不正常?可能是你的正则表达式不好。你的正则表达式将匹配任何数字序列,无论长度有多长,并且不会匹配其他字符。我已经按照建议进行了匹配,但我的文本框接受偶数字符。当你说你的文本框接受偶数字符时,你的确切意思是什么?您的目标是用户只能键入数字吗?是的,用户应该只能键入具有上述条件的数字,我知道正则表达式是正确的,但regex.ismatch函数不起作用。regex是正确的(ish)正则表达式。我已经更新了答案,以便它反映出你需要达到的目标。不捕获组有什么意义?这个表达式和@“^\d{1,14}(\.\d{2})$”一样,我觉得更容易理解。