【问题标题】:Allow specific characters in the middle, but not in the end or beginning允许在中间使用特定字符,但不允许在结尾或开头
【发布时间】:2012-05-02 17:11:23
【问题描述】:

我想定义一个“有效”输入,_-. 不允许在字符串的末尾或开头,只允许在中间。

可接受的字符(位置无关紧要):a-zA-Z0-9 以及我不知道如何在正则表达式中允许它们的所有希伯来字母(可能只是对所有字母进行硬编码?)

不可接受的字符(位置无关紧要):所有符号,除了我之前提供的特殊符号。

我不知道如何构建这种模式,如果您可以在每个部分添加提示和 cmets,我会理解的。谢谢!

这不是家庭作业,只是为了自学。

【问题讨论】:

  • 允许的符号,它们可以距离末端一个字符吗?可以有两个并排吗? (“A...Z”是你想要的有效吗?)
  • 这很好,感谢您指出这一点:a..b 无效,但 'a.b' 有效。使用@Yorye 提供的模式,如何应用此设置?提供模式:@"^[a-zA-Z\dא-ת][\s\w\.א-ת\-]*[a-zA-Z\dא-ת]$"

标签: c# regex


【解决方案1】:
@"^[a-zA-Z\dא-ת][a-zA-Z_\-\.\dא-ת]*[a-zA-Z\dא-ת]$"

如果您想允许“_.-”不重复:

@"^[a-zA-Z\dא-ת]([a-zA-Z\dא-ת]+[_\.\-]?)*[a-zA-Z\dא-ת]$"

如果你想在中间允许空格:

@"^[a-zA-Z\dא-ת][a-zA-Z_\-\.\d\sא-ת]*[a-zA-Z\dא-ת]$"

如果你想要空格 + "_.-" 没有重复:

@"^[a-zA-Z\dא-ת]([a-zA-Z\d\sא-ת]+[_\.\-]?)*[a-zA-Z\dא-ת]$"

所以使用正则表达式:

var isValid = Regex.IsMatch(input, @"...");

另外,如果你打算在代码中多次使用正则表达式,我建议添加 RegexOptions.Compiled 标志,以提高速度。

var isValid = Regex.IsMatch(input, @"...", RegexOptions.Compiled);

【讨论】:

  • 我之前测试过你的代码,没有用,但是新的可以。在正则表达式 '\w' 中定义..? '*' 在中间部分的最后一个之间有什么用?感谢您的帮助。
  • \w 代表“a-zA-Z0-9_”,* 表示它之前的 [] 部分可以出现零次或多次。
  • @GuyDavid 我再次编辑它,因为我忘了在中间允许点。现在是最终版本。
  • 您对 \w 的描述并不完全正确,它的匹配程度比您想象的要多得多。旧的 [A-Za-z0-9_] 仅当您在 .NET 中使用 ECMAScript 兼容版本的正则表达式时才适用。默认情况下,\w 匹配一系列字符,因为它使用 Unicode 匹配。见:msdn.microsoft.com/en-us/library/20bw873z.aspx#WordCharacter
  • @jessehouwing 感谢您的来信!固定。
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多