2011-03-26 43 views
1

我檢查了這個論壇的問題的答案,但無法找到。請專家幫忙。如何使正則表達式模式的某些部分有條件?

我有一個問題來驗證字符串說的第一個名字。我得到了一組字符串需要遵守的規則,並且需要用正則表達式確認相同的需求。我寫了一個模式。除了一個規則,我的模式會尊重其他所有內容。我列出以下

([A-Za-z]+[-'!` ]?)* 

我的正則表達式我檢查的字符串說這需要啓動一個字母,可以有任何一個名字或姓氏 - 這些(或或'或'或空格!) 5個字符只有一個,如果有第二個字。如果一個名字有兩個單詞之間的空格,那麼它就OK了。一些例子

List of Valid Names 
TIMOTHY 
JONATHON 
PATRICK 
B`ELLA 
SUZY JANE - Only one space allowed 
SUZY-JANE 

List of Invalid Ones 
T~ELLA - Because this ~ is not part of regex 
SUZY - JANE - No space allowed between hyphens 
SUZY JANE - 2 spaces betweeb words not allowed 
GRACO&LAME - & is not allowed 

我的正則表達式通過了上述所有條件但是當名稱以任何一個特殊字符結束時失敗。例如,如果我給約翰或約翰或約翰!或約翰或約翰(與s空格在最後)這些是無效的,但我的正則表達式不能夠處理它

有人可以告訴我如何編寫條件正則表達式嗎?如果只有一個字,那麼正則表達式模式必須允許輸入這些特殊字符。

回答

1

試試這個

[A-Za-z]+(?:[-'!` ]?[A-Za-z]+)? 

您可以在線點擊此處查看:regexr

第二部分

(?:[-'!` ]?[A-Za-z]+)? 

是一個非捕獲組,這組是因爲?最後可選。

+0

謝謝您的1str位置。這一個工作與一些小的調整。 – Shiv 2011-03-27 02:23:54

-1

你需要做的是重複文本定義,在標點符號後必須存在1次或多次。這將工作,但每名需要至少2個字符(這似乎是合理的。)

[A-ZA-Z] + [ - !''] + [A-ZA-Z] +

+0

這匹配空字符串以及「a-za-za-z」 – Ingo 2011-03-26 18:48:34

+0

哎呀,我複製並粘貼他的原始文件並留在()*中。拿出來,現在它應該工作。 – roberttdev 2011-03-26 18:53:00

+0

是的,那會做 – Ingo 2011-03-26 18:56:23

1

讓名稱爲簡單名稱的正則表達式,特殊字符集(包括空格)。然後最終的正則表達式看起來像

Name(SpecialName)? 
+0

@ Ingo-我很抱歉,我沒有清楚地理解如何解釋你的答案。 – Shiv 2011-03-26 19:00:21

+0

Name = [A-Z] + Special = [! - ] Regex = [A-Z] +([! - ] [A-Z] +)? – Ingo 2011-03-26 19:04:04

+0

@Ingo - 立即嘗試解決方案 – Shiv 2011-03-26 19:12:24