正则表达式允许并禁止特定字符

时间:2017-03-31 22:01:50

标签: c# regex string

我有RegularExpression如下:

RegularExpression(@"^[a-zA-Z]+[ a-zA-Z-]*$", ...

有没有办法让它禁止双空格,双破折号和破折号空格/空格破折号序列?另外,我需要检查最后一个字符是否是字母数字。

text好的

text-text好的

text text好的

text--text不行

text text不行

text- text不行

text -text不行

text不行

-text不行

text-不行

text不行

谢谢大家,我感谢任何提示。

1 个答案:

答案 0 :(得分:1)

将正则表达式更改为

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

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • [a-zA-Z]+ - 一个或多个ASCII字母
  • (?:[ -][a-zA-Z]+)? - 一个或零个序列:
    • [ -] - 空格或-
    • [a-zA-Z]+ - 一个或多个ASCII字母
  • $ - 字符串结束。

注:

  • 如果您只需要匹配任何Unicode字母,请将我的模式中的[a-zA-Z]替换为\p{L}
  • 要检查字符串在C#中是否有效,请使用var valid = Regex.IsMatch(s, @"^\p{L}+(?:[ -]\p{L}+)?$");

因此,根据您发布的内容,您可以使用

^\p{L}+(?:[ -]\p{L}+)?$

请参阅this regex demo