2012-05-31 167 views
1

我需要帶連字符(-)和下劃線(_)的字母數字字符串。但-_不能單獨來。必須有一些aplha或字母數字文本-_下劃線以及正則表達式

abc- allowed 
abc_abc-xyz allowed 
abc896 allowed 
89abc allowed 
abc_ not allowed 
abc- not allowed 
- not allowed 
_not allowed 
-- not allowed 
________ --- not allowed 

這樣的:

^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$ 

表達做的所有事情如上所述但-我想補充_強調爲好。而-_不能在開始或結束。

+1

字符串可以開始與一個 - 或_?例如_abc或-abc(nvm,你在更新中回答了這個問題) – Duniyadnd

+2

你的例子中有'abc- allowed'和'abc- not allowed',那它是什麼? –

+0

看起來不允許,因爲_「和 - 和_不能在開始或結束時出現」_。 –

回答

0

你非常接近:

^[0-9a-zA-Z]([-_]*[0-9a-zA-Z]+)*$ 

一個更好的可能是:

^[0-9a-zA-Z]([-_]+[0-9a-zA-Z]|[0-9a-zA-Z]+)*$ 
+0

這將不匹配單個字符輸入 –

+0

您在表達式的開始處允許空格和標點符號。 – Mat

+0

是的,更正。 – 0605002

0

你可以試試這個代碼:

^[a-zA-Z0-9]*[a-zA-Z0-9_-]+[a-zA-Z0-9]*$ 
+0

這需要至少三個字符,並允許像'%a&'這樣的東西。 –

0

我把它改寫如:

^[a-zA-Z0-9]+([-_]*[a-zA-Z0-9]+)*$ 
+0

這很容易出現災難性的後退,因爲字符串中有很多字母/數字,最後使用'-'或'_',例如'abcdefghijklmnopqrstuvwxyz-'([rubular](http://www.rubular.com/ R/OZjvNLTOwI))。 –

1

這是我怎麼會這樣寫:

^(?![-_])[-a-zA-Z0-9_]+(?<![-_])$ 

這裏是一個rubular:http://www.rubular.com/r/7biWZhiiVn

^[-a-zA-Z0-9_]+$將只包含您想要的字符的字符串。向前看和向後看確保字符串不以-_開始或結束。

你也許可以改變[-a-zA-Z0-9_][-\w]因爲\w通常相當於[a-zA-Z0-9_],但Unicode選項可以更改的含義包括來自其他語言的字母。

0

這將允許單個-和/或_以任一順序出現,但不能一起出現。也可以讓直字母:

^[a-zA-Z0-9]+[-_]{0,1}[^-_]+[-_]{0,1}[^-_]+$ 

這種替代也似乎工作:

^[^-_]+[-_]{0,1}[^-_]+[-_]{0,1}[^-_]+$ 
相關問題