验证字符串只包含一次`-`或`.`特殊字符

时间:2018-02-06 20:30:23

标签: c# regex

我有一个场景,我需要验证给定的字符串,只允许在给定字符串的中间有-.个特殊字符。

  1. 字符串的开头或结尾不能包含-.个特殊字符。
  2. 在给定字符串中允许-.,而不是同时允许它们(最多允许一次出现)。 我用Regex来验证给定的字符串。
  3. Regex regex = new Regex(@"(^[a-zA-Z]+[.|-]?([a-zA-Z]+)$)"); 并验证传递给IsMatch方法的字符串 regex.IsMatch(givenString)

    以上是我提出的解决方案。有没有更好的方法来验证这种情况?

    由于

1 个答案:

答案 0 :(得分:0)

您当前的正则表达式不允许单个字符输入,而可能有a。您可以使用设置了?量词的分组构造来修复它:

var regex = new Regex(@"^[a-zA-Z]+(?:[.-][a-zA-Z]+)?$");
// or, using the case insensitive modifier
var regex = new Regex(@"^[A-Z]+(?:[.-][A-Z]+)?$", RegexOptions.IgnoreCase);

<强>详情

  • ^ - 字符串开头
  • [a-zA-Z]+ - 一个或多个ASCII字母
  • (?:[.-][a-zA-Z]+)? - 一次或零次重复.-后跟一个或多个ASCII字母
  • $ - 字符串结尾(或\z,以防您在结尾\n之前不想允许匹配)。

请参阅regex demo