字母数字小写和"-&"

本文关键字:quot 数字 | 更新日期: 2023-09-27 18:01:00

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

  1. 仅小写字母数字a to z
  2. 可以包含连字符‘-’,但不能以其开头或结尾
  3. 可以包含'.',但不能以其开头或结尾
  4. 末端可以有空间

我尝试了以下内容,但不起作用,你知道如何改变它吗?

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

字母数字小写和"-&"

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

^[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或一个数字或空格。

shopia,你可以做这样的事情:

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. (?<![-.])是一个否定的lookbacking,断言在字符串的这个位置,我们前面没有短划线或点
  6. $断言我们处于字符串的末尾

请注意,目前还不完全清楚您是否允许在可选的空格字符前使用句点或破折号。我假设答案是肯定的,因为在abcd-中,短划线不在字符串的末尾。但是,如果您甚至不想在短划线之前允许使用该字符,只需移动负数lookbacking,这样您的regex就变成了:

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