2011-10-23 63 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"將匹配,但仍符合字符串以字母開頭和結束的要求。