[英]Regex for alpha number string in c# accepting underscore and white spaces
我已经看过很多关于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]*[_]*)
上面的正则表达式可以在正则表达式在线编辑器中使用,但是不能在c#中的数据注释中使用
请提出建议。
根据您的要求而不是您的尝试,您需要的是:
^(?!(?:\d+|_+| +)$)[\w ]+$
否定的超前查找将导致整个过程失败的不希望的匹配。 这些是仅包含数字,仅包含下划线或仅包含空格的字符串。 如果它们从未发生,我们希望匹配^[\\w ]+$
,几乎与^[a-zA-Z0-9_ ]+$
。
说明 :
^
行/字符串的开头 (?!
开始否定前瞻
(?:
非捕获组的开始
\\d+
匹配数字 |
要么 _+
匹配下划线 |
要么 [ ]+
匹配空间 )$
非捕获组的结尾,紧随其后的是行/字符串的结尾( 不应找到以前的任何匹配项 ) )
否定超前结束 [\\w ]+$
匹配设置到输入字符串末尾的字符中的一个字符 注意: \\w
是[a-zA-Z0-9_]
的简写,除非设置了u
修饰符。
如果我正确理解您的要求,则需要匹配一个或多个字母(大写或小写),并可能匹配零个或多个数字,空格或下划线。 这意味着以下模式:
^[A-Za-z0-9\s_]*[A-Za-z][A-Za-z0-9\s_]*$
在演示中,我将\\s
替换为\\t \\r
,因为\\s
在所有行上都匹配。
与@revo和@wiktor给出的答案不同,我对正则表达式没有花哨的解释。 即使不化妆也很美丽。 老实说,如果您不了解我提供的模式,则可能需要阅读一个好的regex教程。
正则表达式的一个问题是,在批注中,正则表达式必须匹配并使用整个字符串输入,而模式仅包含不使用任何文本的环顾四周。
您可以使用
^(?!\d+$)(?![_\s]+$)[A-Za-z0-9\s_]+$
参见regex演示 。 请注意, \\w
(用于服务器端验证时,因此与.NET regex引擎一起解析)还将在服务器端验证时允许任何Unicode字母,数字和更多内容,因此我宁愿坚持[A-Za-z0-9_]
与服务器端和客户端验证都一致。
细节
^
-字符串的开头(这里没有必要,但是调试时很好用) (?!\\d+$)
-如果整个字符串由数字组成,则匹配失败,匹配失败 (?![_\\s]+$)
-如果整个字符串包含下划线和/或空格,则匹配失败,匹配失败。 注意 :如果您打算只禁止____
或" "
类的输入,则需要将此前瞻分为(?!_+$)
和(?!\\s+$)
) [A-Za-z0-9\\s_]+
-1+ ASCII字母,数字, _
和空格字符 $
-字符串结尾(这里没有必要,但是仍然很不错)。 这个简单的RegEx应该做到这一点:
[a-zA-Z]+[0-9_ ]*
一个或多个字母,后跟零个或多个数字,下划线和空格。
这个应该不错:
[\w\s_]*[a-zA-Z]+[\w\s_]*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.