2014-04-11 84 views
1

我是一個java腳本正則表達式的新手。我需要使用java腳本正則表達式在我的項目中驗證網頁中的一個字段。 - 該字段不應允許除(「/」)以外的任何特殊字符。 - 此外,該字段不允許以「/」開始或以「/」結尾的任何單詞,但允許在「/」之間。 - 也有一個限制,它不應該允許超過一個連續的斜線。 ---該字段應允許單個字符傳遞以及Java腳本正則表達式分組

基本上被允許的詞語是: -

data 
data/sdsd 
d/s/s/sss 

那些不允許有: -

/data 
or //data 
or data/ 
or data//// 
or data/////data 

我儘管有兩個正則表達式 1. (^[\w]+.*[^/]$)即允許以字母數字字符&開頭的單詞也應該不允許單詞以「/」結尾。

我知道這不是一個好的正則表達式(在它之間允許多個數字「/」也特殊字符也沒有照顧),但它的主要問題是,它拒絕單個字符,所以請如果任何一個能幫助我在修改此正則表達式來允許與單個字符,這將是很大的幫助

  1. [\w]+([/][\w]+)*即我想創建一個正則表達式,這將允許任意數量的alphanumberic字符重複的,但如果它看到一個斜線確保它後面跟着一個字母字符。 &我在網上讀到「()」用於羣的文字,所以我想([/][\w]+)*將作爲組,這將允許採取行動: -

    /S,/ SSS,/ dadada

而元字符「*」將確保它將被重複任意次數。但問題在於它不是分組[/][\w]+,而是允許以「/」 結尾的單詞如果任何人都可以幫助我解決這個問題,那麼這將非常有幫助。 Thnaks提前!

+0

請使用圍繞代碼塊的'\'\'''''''''''''''',以便於閱讀。 – Sam

回答

4

這可能不是最有效的,但它應該讓你開始。 Javascript的正則表達式引擎不支持向後看,所以這使得它更復雜一點。

^([a-z]+([a-z]|\/(?![\/]))*[a-z]|[a-z])$ 

http://regex101.com/r/iA9kC6

你也可能會想使用不區分大小寫的修飾,所以結果(與/分隔符)看起來是這樣的:

/^([a-z]+([a-z]|\/(?![\/]))*[a-z]|[a-z])$/i 
+0

良好的工作+1,爲什麼我在試圖擺脫重複的'/'s時忘記了負面預測。 – Sam

+0

感謝您的快速回復。我沒有想到這個或運營商,你可以解釋一下。在我想要了解這個正則表達式允許的情況下 – Caesar

+0

regex101可以做的更好的解釋它比我可以在評論領域;)簡而言之,它會匹配'(one |其他)' – brandonscript

1

我認爲將是幫助解決你的問題。組中的懶惰量詞以及幫助錨定整個事情的開始和結尾引用似乎都起作用。

/^\w([//]?\w+)*?$/ig 
+0

這很好,但我認爲OP只想要字母 - '\ w'包含數字和下劃線。你也不需要在字符類中兩次使用'//',但是你需要將它作爲分隔符來使用:[[\ /]]。不管怎樣,'*'都是懶惰的,所以''''也不需要懶惰的量詞。 http://regex101.com/r/bO9kE4 – brandonscript

+0

@remus:「......既然'*'懶得反正。」 - 不,不是。你說的不需要'?'是正確的,但這是因爲貪婪是我們想要的行爲。你也應該擺脫其他'?',但出於不同的原因。如果第一個'\ w +'(注意'+';這是另一個錯誤)用完匹配的東西,並且接下來的事情不是'/'或者字符串的末尾,那麼匹配嘗試就會失敗。封閉組是可選的,但在組內需要斜線。 –

0

這應該解決您的問題:

^(\w(([/]?\w)*\w)?)$ 

的正則表達式表示:

一場比賽總是要開始一個字字符。

如果超過1個字符,最後一個字符也必須是字符。

在兩者之間的所有chacaters要麼是一個/,後跟一個字字符,或者只有一個字字符,短:([/]?\w)*

添加加可能給你一些性能方面的改進:

^(\w(([/]?\w+)*\w)?)$