繁体   English   中英

C#中接受下划线和空格的Alpha字符串的正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM