2010-09-13 145 views
34
$.validator.addMethod('AZ09_', function (value) { 
    return /^[a-zA-Z0-9.-_]+$/.test(value); 
}, 'Only letters, numbers, and _-. are allowed'); 

當我使用類似test-123的東西時,它仍然會觸發,就像連字符無效。我試過\---在正則表達式字符括號中包含連字符?

+1

裏面我的問題是,我是實際使用方法AZ09,而不是AZ09 _ .. GR – ParoX 2010-09-13 00:17:56

回答

62

使用\-轉義應該沒問題,但您也可以嘗試將其放在字符類的開頭或結尾。這應該爲你工作:

/^[a-zA-Z0-9._-]+$/ 
+1

將連字符放到最後不適用於某些Microsoft工具,如Microsoft SQL Server Management Studio。逃避他們連字符確實工作。 – 2015-06-08 17:04:17

+1

爲什麼只是開始或結束?找不到文檔 – 2015-10-26 04:54:50

+0

@SabaAhang中的任何內容,因爲如果它在開始或結束時不能在兩個其他字符之間創建一系列字符(例如'[0-9]') – Matthew 2016-07-07 14:54:20

18

使用\-轉義連字符是正確的方法。

我已驗證表達式/^[a-zA-Z0-9.\-_]+$/確實允許使用連字符。您也可以使用\w類將其縮短爲/^[\w.\-]+$/

(把連字符最後在表達實際上導致它不需要逃避,因爲它當時不能是一個系列的一部分,但是您可能仍想進入的總是逃脫它的習慣。)

+0

很不錯的。 :D我更喜歡可讀性雖然(我想\ w對於一些專家來說很容易) – ParoX 2010-09-13 00:18:31

+0

將連字符放到最後不適用於某些Microsoft工具,如Microsoft SQL Server Management Studio。逃避他們連字符確實工作。 – 2015-06-08 17:04:21

1

\-應努力逃脫字符範圍的-。你可以引用你測試時似乎沒有?因爲它似乎工作:http://jsbin.com/odita3

0

的\ - 也許是行不通的,因爲你從一個字符串的服務器通過整個的東西。如果是這樣的話,你應該首先逃避\,所以服務器端程序也可以處理它。

  • 在服務器端的字符串:\\ -
  • 在客戶端:\ -
  • 在正則表達式(套): -

或者你可以簡單地把在和[]括號。

0

匹配連字符的更通用的方法是通過使用用於連字符和破折號字符類(「\ p {PD}」沒有引號)。如果你正在處理來自不同文化和來源的文本,你可能會發現那裏有更多類型的連字符,而不僅僅是一個字符。您可以添加的[]表達