2011-10-23 38 views
0

我尝试使用此图案正则表达式验证串

^[A-z]*[A-z,-, ]*[A-z]* 

来匹配与随后由多个连字符或空间的多个字母字符(AZ)开始并以字母字符结尾的字符串,如:

Azasdas- - sa-as 

但它不起作用。

+3

问题通常在其中有一个'?'。很高兴你分享一个不起作用的正则表达式,但这不是共享破坏代码的地方。大多数人会问一个问题,为什么它被打破了,“你能帮忙吗?”类型的东西。 –

+0

@MarcB:OP总结了这个问题,并告诉我们他是如何解决这个问题的;你还需要什么? “我究竟做错了什么?”暗示,并且“你能帮忙吗?”浪费空间(IMO)。 –

回答

1

尝试^[A-Za-z][A-Za-z -]*[A-Za-z]$

^表明,这个词应该用字母(AZ或az)开始,然后跟随任意数量的字母或连字符。然后以$表示的字母结尾。

而且,你不应该使用了Az因为这将包括ASCII范围无意字符91至96参见本table

+0

这留下了空间允许的地方。 –

+0

@DaveNewton谢谢:)做了必要的修改以包含空格。 – srikanta

1

您不需要逗号,在字符范围内,您还需要指定[A-Za-z\- ],因为A-Z和a-z的ASCII不是连续的。你错过了一些可允许的空间,而你最后的表达式需要解释这些传说。

你需要的东西更接近这个:

^([A-Za-z]*)-\s*([A-Za-z][A-Za-z -]*)([A-Za-z-]*)$ 

根据您真的想打破上去。如果不知道“块”背后的上下文,它可能会或可能不会轻松地将它拆分为连字符。

编辑

其实,它更像是:

^([A-Za-z]*)([- ]*)([A-Za-z-]*)$ 

这是一个词,其次是任意空格和连字符,接着是可能包含一个连字符的词。

+0

@NullUserExceptionఠ_ఠ在第一个单词中不允许出现非字母字符? –

+0

你就像一个忍者! (是的,我粘贴了错误的字符串 - 只是编辑它。) –

+0

如果将'-'放在字符类的末尾或开头,则会失去其特殊含义。 – NullUserException

1

不要使用 ''(逗号)

^[A-z]*[A-z- ]*[A-z]* 
+1

'[A-Z]'允许非字母。 –

1

目前公认的答案(^[A-Za-z][A-Za-z-]*[A-Za-z]$)将只匹配至少两个字符长的字符串 - 例如,它将匹配字符串"AB",但不仅仅是"A""B"。与此相比,此正则表达式:

^[A-Za-z]+([ -]+[A-Za-z]+)*$

通过分组[ -]+和第二[A-Za-z]+在一起我​​是说,如果有任何空间和/或连字符,它们必须跟更多的字母。组中的*量词使其成为可选项,因此"A"将匹配,但仍符合字符串以字母开头和结束的要求。