2015-05-04 35 views
1

使用正則表達式來驗證用戶輸入的結束禁止某些字符的正則表達式,我想匹配以字母開頭的任何字符串,接着0個或多個字符,像這樣:,在一個字符串

\A[a-z][a-z0-9_-]* 

,但禁止使用連字符和下劃線作爲字符串中的最後一個字符。我如何完成此RegEx?匹配字符串的

例子:非匹配的字符串

a 
a-b 
ab_c--de 

例子:

a- 
abc- 
a_ 
- 

回答

2
^(?!.*(?:_|-)$)[a-z][a-z0-9_-]*$ 

這應該u太強勢了演示做到這一點。

https://regex101.com/r/uE3cC4/33

+0

我有一種感覺,這是將需要熟悉票友 「期待」 建...謝謝! – Giuseppe

+0

@Giuseppe你正在使用哪種正則表達式?我們也可以使用'lookbehind' – vks

+0

Ruby的Oniguruma(或者它是Onigmo?) – Giuseppe

3

我不知道它背後需要先行/。這對你有用嗎?

\A[a-z]([-_]*[a-z0-9])*\Z 
+0

我完全不能相信@JonathanLeffler,但我認爲它沒關係 - - 至少我沒有能夠拿出一些應該匹配但沒有匹配的東西。 (我想是因爲你可以跳過'[-_] *',直接進入'[a-z0-9]',然後「回到原來的環境」。) – jas

+0

我已經看了一遍並改變了我的想法;你沒事。 –

1

你可以這樣做:

\A([a-z][a-z\d_-]*[a-z\d]|[a-z])\Z 

Demo

+0

我認爲你需要額外的0-9範圍,如:\ A ^([az] [a-z0-9 _-] * [a-z0-9] | [az] +)$ \ Z – Giuseppe

+0

也,爲什麼這個+到底? – Giuseppe

+0

你說的都對。更新。 – dawg