当输入字符串包含&符号时,正则表达式不匹配

时间:2015-05-29 16:40:29

标签: c# regex

我正在努力想出一个以字母开头的正则表达式,后跟只有字母,空格,逗号,圆点,&符号,撇号和连字符。

然而,&符号让我头疼。只要它出现在输入字符串中,正则表达式就不再匹配。

我在一个ASP.net项目中使用正则表达式,在TextInput(在项目中创建的自定义控件)的“格式”属性中使用C#。在其中,我使用Regex.IsMatch(Text, Format)来匹配它。

例如,使用此正则表达式:

^[a-zA-Z][a-zA-Z&.,'\- ]*$

结果是:

John' william-david                      Pass
John, william'david     allen--tony-''   Pass
John, william&david                      Fail

每当我在输入字符串中放置&时,正则表达式不再匹配,但没有它,一切正常。

如何解决我的问题?为什么&符号会引起问题?

注意:

  • 我试图用^[a-zA-Z][a-zA-Z\&.,'\- ]*$来逃避&符号,但它有同样的问题
  • 我试图将&符号放在^[a-zA-Z][&a-zA-Z.,'\- ]*$^[a-zA-Z][a-zA-Z.,'\-\& ]*$的开头或结尾但是它也不起作用

2 个答案:

答案 0 :(得分:2)

你的问题出在其他地方。以下表达式的计算结果为true

Regex.IsMatch(@"John, william&david", @"^[a-zA-Z][a-zA-Z&.,'\- ]*$")

请参阅https://dotnetfiddle.net/WDvQNP

答案 1 :(得分:0)

您在评论中提到您的问题与C#有关,因此我将在该背景下回答您的问题。如果&符号(&)真正为您的角色类提供问题,则应以其他方式指定它。
幸运的是,C#支持hex escape sequences,这意味着您可以将&指定为\x26

例如,而不是:

^[a-zA-Z][a-zA-Z&.,'\- ]*$

使用

^[a-zA-Z][a-zA-Z\x26.,'\- ]*$

如果这不能解决您的问题,那么您的问题不是&,而是其他问题。