我正在使用asp.net mvc和c#对Web应用程序进行编程。 在表单中,用户应在不同的字段中输入名称,街道名称和城市。
这是正确的:
A b c
Abcd ef
Abcdef
这是不正确的:
1abc
A1 bc
1 2 3
a b c(开头的空格)
问题:
正确的正则表达式是什么?
如何设置长度?
在第二种情况下,我也想允许数字0123456789(例如字符)
这就是我所拥有的:'^ [a-zA-Z] [a-zA-Z] [a-zA-Z] $'
谢谢
答案 0 :(得分:5)
您要验证仅包含字母单词的字符串,它们之间用单个空格分隔。
您可以使用正则表达式,例如
^\p{L}+(?: \p{L}+)*$
或者,如果允许任何白化:
^\p{L}+(?:\s\p{L}+)*$
请参见regex demo
要使其仅匹配3个或更多字符的字符串,请使用
^(?=.{3})\p{L}+(?:\s\p{L}+)*$
^^^^^^^^
详细信息
^
-字符串的开头(?=.{3})
=正向超前,字符串开始后立即需要任意3个字符\p{L}+
-1个或多个Unicode字母(?:\s\p{L}+)*
-的零次或多次重复
\s
-任意空格\p{L}+
-1个或多个Unicode字母$
-字符串结尾请注意,如果您需要在ASP.NET中使用它,请仅使用此正则表达式在服务器端进行验证,因为在客户端,JavaScript regex可能无法正确处理此模式
答案 1 :(得分:1)
您可以使用此正则表达式:
^(?:\p{L}+ )*\p{L}+$
\p{L}
匹配“字母”类别中的所有unicode代码点。
正则表达式匹配\p{L}+
中的0个或多个(一个或多个字母加一个空格),然后确保至少有一个或多个字母。
示例代码:
Console.WriteLine(Regex.IsMatch("abc def", @"^(?:\p{L}+ )*\p{L}+$"));