名称,街道名称,城市名称等的正则表达式

时间:2018-10-27 16:03:43

标签: c# regex asp.net-mvc validation

我正在使用asp.net mvc和c#对Web应用程序进行编程。 在表单中,用户应在不同的字段中输入名称,街道名称和城市。

  1. 开始:输入的值必须以“字母”字符开头(无论语言是英语,中文还是法语,还是其他任何语言,例如é和中文字符等等)可以,但是不允许使用** @@#1之类的字符)
  2. 中部:与我首先说的是空格相同(但彼此之间不能有两个空格)。
  3. 结束:我刚开始所说的话。

这是正确的:

  • 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] $'

谢谢

2 个答案:

答案 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个或多个(一个或多个字母加一个空格),然后确保至少有一个或多个字母。

Demo

示例代码:

Console.WriteLine(Regex.IsMatch("abc def", @"^(?:\p{L}+ )*\p{L}+$"));