TLDR:
我可以選擇只添加一個正則運算式。
如何制作這兩個運算式:
- \s
- (\d{10})(19|20)(\d{2})$:$1$3
同時作業(一個接一個)而不是分開作業?
這還不夠:\s|(\d{10})(19|20)(\d{2})$:$1$3
詳細描述:
我有一個運算式:'(\d{10})(19|20)(\d{2})$:$1$3'
它能做什么:
- 用戶密碼應為 12 位數字 - 以年份的最后 2 位數字結尾
- 如果短語有 14 位數字(有人添加全年) - 忽略第 11 位和第 12 位數字
因此,我們可以接受兩個代碼:308814310175 和 30881431011975。
現在我正在尋找一種忽略空格的方法,以防用戶錯誤地將它們添加到任何地方(不是我的要求)。
理論上我可以添加'|\s',得到'\s|(\d{10})(19|20)(\d{2})$:$1$3'。
兩個正則運算式分別作業:
- 當有人添加全年時 - 它會洗掉第 11 位和第 12 位數字
- 當有人添加空格時 - 它會洗掉它,但如果有人添加空格并添加全年,那么只有洗掉空格才有效(因為短語長于 14 位數字)。
所以這有效:
- 308814310175
- 30881431011975
- 3088143 10119
但這不起作用:
- 3088143101 1975
因為它洗掉了空格或第 11 位/第 12 位數字 - 不會讓這兩件事一個接一個地作業。
如何使兩個運算式同時作業?
預先感謝您的幫助。
uj5u.com熱心網友回復:
一個有點長的解決方案是單獨捕獲任何數字并避免空格和可能的第 11 位和第 12 位數字,以防總共 14 位數字:
^\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(?:1\s*9|2\s*0)?\s*(\d)\s*(\d)\s*$
查看在線演示。然后,您可以將其替換為$1$2$3$4$5$5$6$7$8$9$10$11$12
另一種可能性(如果支持)可能是替換:
(?:[^\S\n]|(?<=^\s*(?:\d\s*?){10})\s*(?:1\s*9|2\s*0)(?=\s*\d\s*\d\s*$))
一無所有。但這需要零寬度的后視。看演示
uj5u.com熱心網友回復:
你試圖以復雜的方式解決一個簡單的問題。無需使用復雜的正則運算式,只需使用兩個簡單的步驟:
- 洗掉不需要的空格。
- 應用正則運算式來驗證字串并洗掉其他不需要的字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/519981.html
標籤:正则表达式
