2013-01-03 27 views
4

我想允許字母數字字符和句點;但是,該短語不能在一行中包含更多兩個或更多句點,它不能以句點開始或結束,並且不允許有空格。表達開始或結束時沒有句點?

我使用PHP和Javascript。

到目前爲止,我有/^(?!.*\.{2})[a-zA-Z0-9.]+$/

這適用於允許字母數字字符和句點,同時拒絕空間和連續週期,但我仍然不知道如何檢查開始和/或結束時間。我該怎麼做?而且,還有更好的方式去做我現有的事情嗎?

回答

1

這裏有更多的解釋和測試在這裏看到一個可行的辦法

/^(?!\.)((?:[a-z\d]|(?<!\.)\.)+)(?<!\.)$/i 

http://www.regex101.com/r/rZ6yH4

編輯:根據泰勒的解決方案,這裏有他的方式,縮短和減少到字母和數字

/^(?:[a-z\d]+(?:\.(?!$))?)+$/i 

http://www.regex101.com/r/dL5aG0

+1

缺少'i'國旗。 – nhahtdh

+0

附加,謝謝 – bukart

+0

這對我迄今爲止測試過的每種情況都非常有效(請注意,我正在使用二者中的第二個。)感謝您的回答! – JohnZ

0

一開始應該是:

/^[^. ](?!.*\.{2})[a-zA-Z0-9.]+[^. ]$/ 

但應該仔細測試。

+0

這將允許任何字符,..方括號內有一個點。你必須逃避點! – bukart

+0

@bukfixart:'''在'[]'裏面'只是一個點,它沒有特別的意義。 – nhahtdh

+1

@bukfixart - 不,不在方括號內。在那裏,你只需要脫離上面的連字符和連字符。有時候一支雪茄只是一支雪茄。 – Malvolio

3

它幾乎總是有助於繪製一個有限狀態機來概念化你的正則表達式應該看起來像什麼。

^(?:\w\.?)*\w$ 
+1

使用'\ w','\ d'是多餘的。而負面的前瞻性論斷對我來說似乎是多餘的。 – nhahtdh

+0

+1激發我的第二個解決方案 – bukart

+0

@nhahtdh,啊,那正則表達式是一個思考的東西,我想我沒有費心檢查它是否是最簡單的形式。謝謝。 –

相關問題