2014-10-02 142 views
0

我一直在使用谷歌搜索尋找一個類似的例子。我需要使用下面的正則表達式(工作),但限制允許的字符數,以20:在正則表達式中設置最大長度

/^[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)*$/ 

問題是唯一的例子是使用一個簡單得多的匹配模式我似乎不能在效仿以上:

如/^.{1,35}$/

+0

你想讓一個字符?什麼是至少和最長的字符長度? – 2014-10-02 13:35:51

+0

你*需要*來?爲什麼不把檢查長度作爲一個單獨的步驟? – 2014-10-02 13:35:58

回答

2

我想你想T中的字符長度o允許從1到20.如果是,那麼你可以嘗試下面的正則表達式。

^(?=.{1,20}$)[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)* 

DEMO

(?=.{1,20}$)在第一正先行斷言,字符長度必須是從1到20。

2

使用strlen()驗證長度:

if (strlen($value) > 20) 
{ 
    // Too long 
} 
else 
{ 
    // OK, perform regex 
} 
+0

...這是一個選項,但正則表達式模式的修改似乎更符合我的代碼:) – Sideshow 2014-10-02 13:51:50

+0

沒問題,祝你好運:) – Luke 2014-10-02 13:56:03

0

@wavemode第一匹配限制到一個字符,然後確保長度第二場比賽的比率介於0和19之間:

在2和第一個符號之間添加alphanum重複項。

/^[A-Za-z0-9](?:[A-Za-z0-9]*[@_\-.][A-Za-z0-9]+){0,19}$/