我已经在 SO 上浏览了很多帖子。我找不到适合我的特定情况的东西。
我需要一个用于正则表达式的字母数字字符串。 满足以下条件的地方
有效字符串:
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#中的数据注释
请提出建议。
答案 0 :(得分:2)
根据您的要求而不是您的尝试,您需要的是:
^(?!(?:\d+|_+| +)$)[\w ]+$
否定的超前查找将使整个过程失败,从而导致不需要的匹配。这些是仅包含数字,仅包含下划线或仅包含空格的字符串。如果它们从未发生,我们希望找到^[\w ]+$
的匹配项,而该匹配项与^[a-zA-Z0-9_ ]+$
几乎相同。
说明:
^
行/字符串的开头(?!
否定超前开始
(?:
非捕获组的开始
\d+
匹配数字|
或_+
匹配下划线|
或[ ]+
匹配空间)$
非捕获组的结尾,紧随其后的是行/字符串的结尾( 以前没有匹配项 ))
否定超前结束[\w ]+$
将字符集中的一个字符匹配到输入字符串的末尾注意:\w
是[a-zA-Z0-9_]
的简写,除非设置了u
修饰符。
答案 1 :(得分:1)
如果我正确理解您的要求,则需要匹配一个或多个字母(大写或小写),并可能匹配零个或多个数字,空格或下划线。这意味着以下模式:
^[A-Za-z0-9\s_]*[A-Za-z][A-Za-z0-9\s_]*$
在演示中,我将\s
替换为\t \r
,因为\s
在所有行上都匹配。
与@revo和@wiktor给出的答案不同,我对正则表达式没有花哨的解释。即使不化妆也很美丽。老实说,如果您不了解我给的模式,您可能想复习一个好的regex教程。
答案 2 :(得分:1)
您的正则表达式的一个问题是,在批注中,正则表达式必须匹配并使用整个字符串输入,而您的模式仅包含不占用任何文本的环顾四周。
您可以使用
^(?!\d+$)(?![_\s]+$)[A-Za-z0-9\s_]+$
请参见regex demo。请注意,\w
(用于服务器端验证并因此与.NET regex引擎一起解析时)还将在服务器端验证时允许任何Unicode字母,数字和更多内容,因此,我想宁愿坚持使用[A-Za-z0-9_]
来与服务器端验证和客户端验证保持一致。
详细信息
^
-字符串的开头(这里不是必需的,但是在调试时可以使用)(?!\d+$)
-如果整个字符串由数字组成,则否定超前行为将使匹配失败(?![_\s]+$)
-如果整个字符串包含下划线和/或空格,则否定超前匹配将失败。 注意:如果您打算仅禁止输入____
或" "
之类的内容,则需要将此前瞻分为(?!_+$)
和(?!\s+$)
)[A-Za-z0-9\s_]+
-1个以上的ASCII字母,数字,_
和空格字符$
-字符串的结尾(这里不是必需的,但是仍然很不错)。答案 3 :(得分:0)
这个简单的RegEx应该可以做到:
[a-zA-Z]+[0-9_ ]*
一个或多个字母,后跟零个或多个数字,下划线和空格。
答案 4 :(得分:0)
这应该很好:
[\w\s_]*[a-zA-Z]+[\w\s_]*