php
  • regex
  • 2014-10-28 70 views -1 likes 
    -1

    內標籤我有一個正則表達式<br> reqular表達

    $rExp = '/^[0-9a-zA-Z\s"]{1,22}$/'; 
    

    並檢查

    if(preg_match($rExp, $userString)) {echo 'OK';} 
    

    我的問題是$ userString可以是這樣的:

    $userString = 'Hello<br>hello'; 
    

    我可以修改像這樣的正則表達式:

    $rExp = '/^[0-9a-zA-Z\s<>"]{1,22}$/'; 
    

    但我不喜歡它,因爲它也接受腳本和其他標記

    我怎樣才能改變正則表達式,因此只接受BR標籤?

    謝謝

    +0

    它是確定與正則表達式檢查之前空格替換''
    ? – Cheery 2014-10-28 18:00:40

    +0

    您正在查找完整的1..22個字符。 '
    '會超過這個限制嗎? – OnlineCop 2014-10-28 18:02:58

    +0

    良好的觀察。我需要重新考慮字符限制。 @OnlineCop – EstSiim 2014-10-28 18:44:51

    回答

    0

    林假定這是爲某種輸入驗證。

    @onlineCop建議的答案將工作,但我認爲這將弄亂字符串的「長度」,因爲<br>標籤將計爲4個字符。

    它會工作嗎?是的,當然。這是預期的結果?我不確定。

    如果多數民衆贊成在你身上,優秀!我認爲這將是最快的方法,但有一個非常開銷,你可以這樣做:

    $maxLength = 22; 
    
    // As proposed by @onlineCop but without char count 
    $regEx = '^(?=(?:[0-9a-zA-Z\s"]|<br>)+$).+$' 
    
    /* 
    * First: Does it has the valid length? 
    * Second: Does it has only valid characters/tags? 
    */ 
    if (count(strip_tags($userString)) <= $maxLength) && 
        preg_match($regEx, $userString)) { 
        echo 'OK'; 
    } 
    
    2

    您可以使用從行的開頭前瞻來驗證後續將匹配您的標準的字符或單詞,然後立即跟隨,通過長度驗證:

    ^(?=(?:[0-9a-zA-Z\s"]|<br>)+$).{1,22}$ 
    

    您可以將所需的任何單個字符添加到[...]字符組中,並且可以使用其他項目儘可能多地使用|<something>

    Demo

    相關問題