允许在中间的特定字符,而不是在开始前或结束

问题描述:

我想定义一个“有效”的输入,这是_-.将不会在年底或字符串的开头允许的,只允许在中间。允许在中间的特定字符,而不是在开始前或结束

可接受的字符(位置无所谓):a-zA-Z0-9和所有的希伯来字母,我不知道如何让他们在一个正则表达式

(也许只是硬编码的所有的信吗?) 不可接受的字符(位置无关紧要):除了我之前提供的特殊符号之外的所有符号。

我不知道如何建立这种模式,如果你能在每个部分中添加提示和意见,所以我就明白了。谢谢!

这不是功课,只是为了自我学习。

+0

允许的符号,它们可以离开末端一个字符吗?可以有两个彼此相邻吗? (将“'一... Z'”是你会想要有效吗?) – 2012-04-21 09:35:04

+0

这是一个伟大的一点,感谢指出了这一点:'a..b'是无效的,但是''a.b''是有效。使用@Yorye提供的模式,我该如何应用此设置?提供模式:'@ “^ [A-ZA-Z \ dא-ת] [。\ S \ W \א-ת\ - ] * [A-ZA-Z \ dא-ת] $”' – Novak 2012-04-21 09:40:58

@"^[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); 
+0

我已经测试你的代码之前,没有工作,但新的。在正则表达式中,\ w'定义..?中间部分的最后部分使用'*'是什么?谢谢你的帮助。 – Novak 2012-04-21 09:34:01

+0

\ w代表“a-zA-Z0-9_”,*表示[]部分可以出现零次或更多次。 – SimpleVar 2012-04-21 09:34:56

+0

@GuyDavid我再次编辑它,因为我忘记了在中间的点。这现在是最终的。 – SimpleVar 2012-04-21 09:36:37