Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 至少一位数字,最小长度为8个字符,使用unicode_C#_Asp.net_Regex - Fatal编程技术网

C# 至少一位数字,最小长度为8个字符,使用unicode

C# 至少一位数字,最小长度为8个字符,使用unicode,c#,asp.net,regex,C#,Asp.net,Regex,我知道以前有人问过很多次正则表达式的问题,但我就是不能按照我的需要去做。我需要的是一个正则表达式,至少包含8个字符,至少包含一个数字(数字可以出现在开始、结束或其他字符之后),并支持Unicode,以便可以使用希伯来语、阿拉伯语等字符。以下是基本正则表达式: ^(?=.*?\d).{8} ^.{8}将匹配至少包含8个字符的任何字符串(?=.*?\d)将断言其中有一个数字 至于Unicode支持,这取决于正则表达式引擎。如果支持Unicode,应与Unicode字符匹配。如果您想匹配graphe

我知道以前有人问过很多次正则表达式的问题,但我就是不能按照我的需要去做。我需要的是一个正则表达式,至少包含8个字符,至少包含一个数字(数字可以出现在开始、结束或其他字符之后),并支持Unicode,以便可以使用希伯来语、阿拉伯语等字符。

以下是基本正则表达式:

^(?=.*?\d).{8}
^.{8}
将匹配至少包含8个字符的任何字符串<代码>(?=.*?\d)将断言其中有一个数字

至于Unicode支持,这取决于正则表达式引擎。如果支持Unicode,
应与Unicode字符匹配。如果您想匹配graphemes,您的正则表达式风格可能支持
\X
,您可以使用它来代替

如果要允许非拉丁数字,可能需要将
\d
替换为
\p{N}
,具体取决于正则表达式引擎

更新.NET版本:

  • \d
    已匹配Unicode数字,因此您不需要使用
    \p{N}
  • 不支持
    \X
    ,因此您必须坚持使用
    或使用类似
    (?>\P{M}\P{M}*)
    的解决方法
假设您使用的是C#或类似Java的正则表达式风格,您的意思是 使用unicode类别“字母”的字符,您可以 使用:


(?=\p{L}*?\p{Nd})[\p{L}\p{Nd}]{8,}

Unicode支持随正则表达式的每个实现而变化。你在哪里使用这个表达式?我可以帮忙。您可能需要将
10
替换为
8,
。我正在使用ASP.NET。但是Lucas和Andie2302的答案似乎很有效。非常感谢Locas,这似乎很有效。好吧,我好像忘了提到如果字符串只包含数字,那么匹配失败,所以8888893应该失败。@ashilon然后在
^
之后可以添加
(?=.*D)
(?=.*p{L}
<代码>\D需要非数字,
\p{L}
需要字母。完整的正则表达式类似于
^(?=.*?\d)(?=.*?\d)。{8}
谢谢你,你的解决方案也可以。似乎对于正则表达式,总是有很多方法可以解决这个问题。再次感谢