Alpha数字小写字母和" - " ,

时间:2014-05-01 09:35:44

标签: c# regex

我想验证用户只输入以下内容:

  1. 字母数字a to z仅限小写。
  2. 可以包含连字符‘-’但不能以其开头或结尾。
  3. 可以包含'.'但不能以其开头或结尾。
  4. 最后可以有空间。
  5. 我尝试使用以下但不起作用,任何想法如何改变它?

    "^[a-z0-9]+(\.-[a-z0-9]+)*$"
    

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式:

^[a-z\d][\da-z-.]*[a-z\s\d]$

^[a-z\d]表示以a-z或数字开头。

然后

[\da-z-.]*表示匹配0或更多数字,a-z,连字符和点

[a-z\s\d]$表示它只允许a-z或数字或空格。

答案 1 :(得分:2)

你可以这样做:

bool isValid = false;
try {
    isValid = Regex.IsMatch(s1, @"^[a-z\d][-.a-z\d]* ?(?<![-.])$");
} catch (ArgumentException ex) {
    // some syntax error
}

以下是引擎尝试从左到右匹配的标记,因为它从左到右读取字符串。

  1. ^声称我们位于字符串的开头。
  2. [a-z\d]字符类匹配一个字母或数字。
  3. [-.a-z\d]匹配一个短划线,点,字母或数字,*使这种情况发生零次或多次。
  4. ?(注意问号前的空格)允许末尾有空格
  5. (?<![-.])是一个负面的后瞻断言,声称在字符串中的这个位置,我们不会立即以破折号或点开头
  6. $断言我们在字符串的末尾。
  7. 请注意,在可选空格字符之前是否允许使用点或短划线并不完全清楚。我假设答案是肯定的,因为在abcd-中,短划线不在字符串的末尾。但是,如果你甚至不希望在破折号之前允许该角色,只需移动负面的背后,以便你的正则表达式成为:

    ^[a-z\d][-.a-z\d]*(?<![-.]) ?$