c# 中接受下划线和空格的字母数字字符串的正则表达式
Regex for alpha number string in c# accepting underscore and white spaces
我已经在 SO 上经历了很多 post。我没有找到我的特定场景所需的内容。
我需要一个字母数字字符串的正则表达式。
应满足以下条件
有效字符串:
ameya123 (alphabets and numbers)
ameya (only alphabets)
AMeya12(Capital and normal alphabets and numbers)
Ameya_123 (alphabets and underscore and numbers)
Ameya_ 123 (alphabets underscore and white speces)
无效的字符串:
123 (only numbers)
_ (only underscore)
(only space) (only white spaces)
any special charecter other than underscore
到目前为止我尝试了什么:
(?=.*[a-zA-Z])(?=.*[0-9]*[\s]*[_]*)
上述正则表达式在 Regex online editor 中有效,但在 c#
中的数据注释中无效
请推荐。
如果我对您的要求理解正确,您需要匹配一个或多个字母(大写或小写),可能还有零个或多个数字、空格或下划线。这意味着以下模式:
^[A-Za-z0-9\s_]*[A-Za-z][A-Za-z0-9\s_]*$
在演示中,我将 \s
替换为 \t \r
,因为 \s
匹配所有行。
与@revo 和@wiktor 给出的答案不同,我对正则表达式没有花哨的解释。即使不化妆我也很漂亮。老实说,如果您不理解我给出的模式,您可能需要查看一个很好的正则表达式教程。
这个简单的 RegEx 应该可以做到:
[a-zA-Z]+[0-9_ ]*
一个或多个字母,后跟零个或多个数字、下划线和 Space。
这个应该不错:
[\w\s_]*[a-zA-Z]+[\w\s_]*
根据您的要求而不是您的尝试,您需要的是:
^(?!(?:\d+|_+| +)$)[\w ]+$
否定前瞻查找不需要的匹配以使整个过程失败。这些是仅包含数字、仅下划线或仅包含空格的字符串。如果它们永远不会发生,我们希望 ^[\w ]+$
与 ^[a-zA-Z0-9_ ]+$
.
几乎相同
说明:
^
行/字符串的开始
(?!
否定先行开始
(?:
非捕获组开始
\d+
匹配数字
|
或
_+
匹配下划线
|
或
[ ]+
匹配空格
)$
非捕获组的结尾紧跟行/字符串的结尾(应该找到先前匹配的none)
)
负前瞻结束
[\w ]+$
匹配字符集内的一个字符到输入字符串的末尾
注意:\w
是 [a-zA-Z0-9_]
的 shorthand,除非设置了 u
修饰符。
你的正则表达式的一个问题是在注释中,正则表达式必须匹配并消耗整个字符串输入,而你的模式只包含不消耗任何文本的环视。
您可以使用
^(?!\d+$)(?![_\s]+$)[A-Za-z0-9\s_]+$
见regex demo。请注意,\w
(当用于服务器端验证时,因此使用 .NET 正则表达式引擎进行解析)在服务器端验证时也将允许任何 Unicode 字母、数字和更多内容,所以我会而是坚持 [A-Za-z0-9_]
以与服务器端和客户端验证保持一致。
详情
^
- 字符串的开始(这里不是必需的,但调试时最好有)
(?!\d+$)
- 如果整个字符串由数字 组成,则匹配失败的否定前瞻
(?![_\s]+$)
- 如果整个字符串由下划线 and/or 空格组成,则匹配失败的否定前瞻。 注意:如果您打算仅禁止 ____
或 " "
之类的输入,您需要将此前瞻拆分为 (?!_+$)
和 (?!\s+$)
)
[A-Za-z0-9\s_]+
- 1+ ASCII 字母、数字、_
和空白字符
$
- 字符串结尾(这里不需要,但仍然很好)。
我已经在 SO 上经历了很多 post。我没有找到我的特定场景所需的内容。
我需要一个字母数字字符串的正则表达式。 应满足以下条件
有效字符串:
ameya123 (alphabets and numbers)
ameya (only alphabets)
AMeya12(Capital and normal alphabets and numbers)
Ameya_123 (alphabets and underscore and numbers)
Ameya_ 123 (alphabets underscore and white speces)
无效的字符串:
123 (only numbers)
_ (only underscore)
(only space) (only white spaces)
any special charecter other than underscore
到目前为止我尝试了什么:
(?=.*[a-zA-Z])(?=.*[0-9]*[\s]*[_]*)
上述正则表达式在 Regex online editor 中有效,但在 c#
中的数据注释中无效请推荐。
如果我对您的要求理解正确,您需要匹配一个或多个字母(大写或小写),可能还有零个或多个数字、空格或下划线。这意味着以下模式:
^[A-Za-z0-9\s_]*[A-Za-z][A-Za-z0-9\s_]*$
在演示中,我将 \s
替换为 \t \r
,因为 \s
匹配所有行。
与@revo 和@wiktor 给出的答案不同,我对正则表达式没有花哨的解释。即使不化妆我也很漂亮。老实说,如果您不理解我给出的模式,您可能需要查看一个很好的正则表达式教程。
这个简单的 RegEx 应该可以做到:
[a-zA-Z]+[0-9_ ]*
一个或多个字母,后跟零个或多个数字、下划线和 Space。
这个应该不错:
[\w\s_]*[a-zA-Z]+[\w\s_]*
根据您的要求而不是您的尝试,您需要的是:
^(?!(?:\d+|_+| +)$)[\w ]+$
否定前瞻查找不需要的匹配以使整个过程失败。这些是仅包含数字、仅下划线或仅包含空格的字符串。如果它们永远不会发生,我们希望 ^[\w ]+$
与 ^[a-zA-Z0-9_ ]+$
.
说明:
^
行/字符串的开始(?!
否定先行开始(?:
非捕获组开始\d+
匹配数字|
或_+
匹配下划线|
或[ ]+
匹配空格
)$
非捕获组的结尾紧跟行/字符串的结尾(应该找到先前匹配的none)
)
负前瞻结束[\w ]+$
匹配字符集内的一个字符到输入字符串的末尾
注意:\w
是 [a-zA-Z0-9_]
的 shorthand,除非设置了 u
修饰符。
你的正则表达式的一个问题是在注释中,正则表达式必须匹配并消耗整个字符串输入,而你的模式只包含不消耗任何文本的环视。
您可以使用
^(?!\d+$)(?![_\s]+$)[A-Za-z0-9\s_]+$
见regex demo。请注意,\w
(当用于服务器端验证时,因此使用 .NET 正则表达式引擎进行解析)在服务器端验证时也将允许任何 Unicode 字母、数字和更多内容,所以我会而是坚持 [A-Za-z0-9_]
以与服务器端和客户端验证保持一致。
详情
^
- 字符串的开始(这里不是必需的,但调试时最好有)(?!\d+$)
- 如果整个字符串由数字 组成,则匹配失败的否定前瞻
(?![_\s]+$)
- 如果整个字符串由下划线 and/or 空格组成,则匹配失败的否定前瞻。 注意:如果您打算仅禁止____
或" "
之类的输入,您需要将此前瞻拆分为(?!_+$)
和(?!\s+$)
)[A-Za-z0-9\s_]+
- 1+ ASCII 字母、数字、_
和空白字符$
- 字符串结尾(这里不需要,但仍然很好)。