簡體   English   中英

我如何編寫 Javascript 正則表達式模式來處理這些情況

[英]How can I write the Javascript Regular Expression pattern to handle these conditions

在我的練習中,我的任務是編寫一個正則表達式模式來驗證用戶名輸入以存儲到數據庫中。

用戶名只能使用字母數字字符。

用戶名中唯一的數字必須在末尾。 最后可以有零個或多個。 用戶名不能以數字開頭。

用戶名字母可以是小寫和大寫。

用戶名的長度必須至少為兩個字符。 兩個字符的用戶名只能使用字母作為字符。

我成功通過了除一項以外的所有測試

A1 不應該匹配模式

let userCheck = /^[A-Za-z]+\w\d*$/;
let result = userCheck.test(username);

編輯:

我的第一個答案沒有完全解決任務。 這個正則表達式做:

^([A-Za-z]{2}|[A-Za-z]\w{2,})$

它匹配兩個字符,或一個字符后跟至少兩個字符和/或數字( \w == [A-Za-z0-9] )。 在此處查看演示: https://regex101.com/r/sh6UpX/1

第一個答案(錯誤)

這適用於您的描述:

let userCheck = /^[A-Za-z]{2,}\d*$/;
let result = userCheck.test(username);

讓我解釋一下你的正則表達式出了什么問題:

/^[A-Za-z]+\w\d*$/

你正確匹配,第一個字符只是一個字母。 然而,'+' 只能確保它至少匹配一次。 如果你想匹配某些東西的確切次數,你可以 append '{x}' 到你的匹配案例。 如果您想匹配最小和最大次數,可以使用 append '{min, max}'。 在你的情況下,你只有一個下限(2 次),所以最大值保持為空,意味着無限次:{2,}

在你的 [2 - unlimited] 個字母之后,你想要 [0 - unlimited] 個數字。 '\w' 也匹配字母,所以我們可以刪除它。 正則表達式的末尾是正確的,因為 '\d' 匹配任何數字,而 '*' 量化范圍 [0 - 無限制] 的前一個匹配項。

我建議使用 regex101.com 來測試和開發正則表達式模式。 您可以測試您的字符串並獲得關於所有標簽的非常好的文檔和解釋。 我將帶有一些示例字符串的正則表達式添加到此鏈接: https://regex101.com/r/qPmwhG/1

匹配的字符串將被突出顯示,其他字符串不突出顯示。

您可以在第一個字母^[az]之后使用交替來要求[az]+一個或多個字母后跟\d*任意數量的數字| \d{2,}兩個或更多數字,直到字符串的$結尾

let userCheck = /^[a-z](?:[a-z]+\d*|\d{2,})$/i;

請參閱 regex101 中的此演示- 與i -標志(忽略大小寫)一起使用以將[A-Za-z]縮短為[az]


PS :剛剛在一些遲來的咖啡☕更新了我的答案。 之前誤讀了問題並同時刪除了我的答案。 我也會錯過我剛剛在其他答案評論中讀到的例如Z97的部分。 這比乍一看更具挑戰性......顯然:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM