![](/img/trans.png)
[英]Regex to not match leading and trailing white spaces for email address in javascript
[英]Is there a better way to write a regex that does not match on leading and trailing spaces along with a character limit?
我有的正則表達式是...
^[A-z0-9]*[A-z0-9\s]{0,20}[A-z0-9]*$
此正則表達式的最終目標是不允許前導和尾隨空格,同時將輸入的字符限制為20個,而上述正則表達式不能很好地做到這一點。
我發現了一些與此類似的問題,而與此最接近的問題是如何使用正則表達式驗證用戶名? ,但沒有限制字符數。 這確實解決了前導和尾隨空格的問題。
我還看到了使用否定和另一種否定性超前的方法,但這對我來說效果不佳。
有沒有更好的方法來編寫20個字符以下的正則表達式? 允許的字符重復非常難看,尤其是當允許的字符列表很大且特定時。
嗯,如果您需要排除單個字符的文本,我可以選擇:
^[A-z0-9][A-z0-9\s]{0,18}[A-z0-9]$
如果單個字符也可以接受:
^[A-z0-9](?:[A-z0-9\s]{0,18}[A-z0-9])?$
更新:
我更喜歡這個。 我們使用負數前瞻,以確保在字符串末尾沒有^\\s
(字符串開頭的空白)或\\s$
空格。 然后匹配1個字母數字字符。 我們將其重復1-20次。
/^(?:(?!^\s|\s$)[a-z0-9\s]){1,20}$/i
^ (?# beginning of string)
(?: (?# non-capture group for repetition)
(?! (?# begin negative lookahead)
^\s (?# whitespace at beginning of string)
| (?# OR)
\s$ (?# whitespace at end of string)
) (?# end negative lookahead)
[a-z0-9\s] (?# match one alphanumeric/whitespace character)
){1,20} (?# repeat this process 1-20 times)
$ (?# end of string)
初始:
我在字符串的開頭( (?!...)
)使用否定的前瞻,以確保我們不以空格開頭。 然后,我們檢查0-19個字母數字字符(由於使用i
修飾符而不區分大小寫)或空格字符。 最后,由於我們不能在Javascript中使用lookbehinds,因此請確保以純字母數字字符(無空格)結尾。
/^(?!\s)[a-z0-9\s]{0,19}[a-z0-9]$/i
[\\]^_`
? 我想我會做這樣的事情:
input = input.trim().replace(/\\s+/, ' '); if (input.length > MAX_INPUT_LENGTH || ! /^[az ]+$/i.match(input) ) { # raise exception? }
\\S
匹配非空格字符。 因此,這應該與您要查找的內容匹配:
^\\S.{0,18}\\S$
也就是說,一個非空格字符\\S
,后跟最多18個任何類型的字符.
(是否為空格),最后是非空格字符。
上述正則表達式的唯一限制是該值必須至少為2個字符。 如果需要允許1個字符,則可以使用:
^\\S(.{0,18}\\S)?$
如果您要驗證用戶名(暗示但未明確說明),則可能只允許數字,字母和下划線。 在這種情況下, ^\\w{1,20}$
就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.