2017-08-08 38 views
0

末要斷言與正則表達式的字符串的結尾,您可以使用$當且僅當串

從我讀過,雖然這正是它的作用:

$斷言位置字符串的結束,或者之前在字符串末尾的行終止權(如果有的話)

因此,這意味着它並不完全正確,例如,它不會有所作爲,如果我追加\n到使用$時的字符串。

在我的情況下,這將是我的PHP代碼中的安全漏洞,因爲我用這個正則表達式來驗證在註冊字母用戶名:

/^[a-zA-Z0-9]+$/ 

有沒有辦法嚴格斷言當且僅當它結束與正則表達式的字符串?

+0

評論是不適合擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/151410/discussion-on-question-by-super-if-and-only-if-end-of-string)。 –

回答

2

至少有兩種方法可以確保您在字符串的最後匹配PCRE正則表達式。

您可以使用該字符串的最末尾匹配\z主播:

/^[a-zA-Z0-9]+\z/ 

或者,你可以使用一個D修改:

/^[a-zA-Z0-9]+$/D 

PCRE_DOLLAR_ENDONLY修改D使得$錨在字符串(不包括字符串中最後一個換行符之前的位置)的末尾匹配,即充當\z主播。

+0

不錯,優雅。 – super

+0

你更喜歡哪一個? – super

+1

我寧願少修飾語(他們重新定義了某些東西的行爲,而這並不是直截了當的)。我會用'\ z',這對我來說是最直接的方式。 –

相關問題