0
[RegularExpression("^([a-zA-Z-`])+$", ErrorMessage = "Please correct your First Name - this should not contain any special characters other than - or `.")]
public string FirstName { get; set; }

我有上面的正则表达式模式,只允许用户输入字母、破折号和反引号。但是,我无法创建一个仅允许字母后跟破折号或撇号的模式。例如:

有效:sam`s、abd-cdf、dbc-dfd`s

无效:sam``s,abcd--cef,dbf-`dfd,dbf`-dfd

如何确保上述两个特殊字符: dash 和 backtick (如果包含在字符串中)应该仅在出现前后出现字母。

4

3 回答 3

1

首先,您应该避免在字符类中的字符之间放置破折号(或连字符),除非您需要一系列字符。由于您只需要反引号和连字符,因此最好使用:

^[a-zA-Z`-]+$

另外,我认为这里不需要捕获组。

进入下一个需求。您可能想使用类似的东西:

^[a-zA-Z]+(?:[`-][a-zA-Z]+)*$

这是任意数量的字母,后跟一个`or-和另一个系列的字母,并使反引号和连字符仅出现在字符串的中间。

正则表达式101演示

于 2013-09-16T09:27:03.440 回答
0

你可以用这个

^([a-zA-Z]|(?<=[a-zA-Z])[`-])+$

哪个将匹配任意数量的

[a-zA-Z]

或者

(?<=[a-zA-Z])[`-])

第二部分使用了一个lookbehind,它表示一个反引号或-必须在一个字符类之前[a-zA-Z]

演示

于 2013-09-16T09:39:02.093 回答
0

尝试这个。它应该适合你。让我知道您是否还有其他条件。

^[a-zA-Z]+((`|-)[a-zA-Z]+)*$
于 2013-09-16T09:42:47.687 回答