我想验证用户只输入以下内容:
a to z
仅限小写。‘-’
但不能以其开头或结尾。'.'
但不能以其开头或结尾。我尝试使用以下但不起作用,任何想法如何改变它?
"^[a-z0-9]+(\.-[a-z0-9]+)*$"
答案 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
}
以下是引擎尝试从左到右匹配的标记,因为它从左到右读取字符串。
^
声称我们位于字符串的开头。[a-z\d]
字符类匹配一个字母或数字。[-.a-z\d]
匹配一个短划线,点,字母或数字,*
使这种情况发生零次或多次。?
(注意问号前的空格)允许末尾有空格(?<![-.])
是一个负面的后瞻断言,声称在字符串中的这个位置,我们不会立即以破折号或点开头$
断言我们在字符串的末尾。请注意,在可选空格字符之前是否允许使用点或短划线并不完全清楚。我假设答案是肯定的,因为在abcd-
中,短划线不在字符串的末尾。但是,如果你甚至不希望在破折号之前允许该角色,只需移动负面的背后,以便你的正则表达式成为:
^[a-z\d][-.a-z\d]*(?<![-.]) ?$