[英]how to validate an expression based on certain requirement using javascript?
[英]Using Regular Expression to validate the following requirement?
我正在嘗試驗證一個由“-”、“:”、“/”分隔的 5 位數字的 15 位數字,它應該以 5、4 或 37 開頭,它也不應該包含任何字符。
它的意思是
37344-37747-27744 - 有效
40344-37747-27744 - 有效
59344-37747-27744 - 有效
37344:37747:27744 - 有效
37344/37747/27744 - 有效
87887-98734-83422 - 無效
548aa:aa764:90887 - 無效
37759\29938\92093 - 無效
到目前為止,我只能撥打 go
\d{5}[-:\/]\d{5}[-:\/]\d{5}
請幫忙。
試試這個:
(((5|4)\d{4})|((37)\d{3}))[-:\/]\d{5}[-:\/]\d{5}
https://regex101.com/r/VvTq5P/1
編輯:
我還要添加: \b
在開頭和結尾:
\b(((5|4)\d{4})|((37)\d{3}))[-:\/]\d{5}[-:\/]\d{5}\b
所以沒有像:
12337344-37747-27744
可以通過測試。
您可以使用 look ahead (?=.)
首先檢查您的字符串是否以數字5|4|37
^
,這是要求,這里是完整模式:
^(?=5|4|37)\d{5}[-:\/]\d{5}[-:\/]\d{5}$
如果我理解正確,正則表達式是這樣的:
((5|4)\d{4}|37\d{3})[-:\/]\d{5}[-:\/]\d{5}
需要是
4XXXX、5XXXX 或 37XXX
所以我把它分開接受 3 forms
((5|4)\d{4}|37\d{3})[-:\/]\d{5}[-:\/]\d{5}
(5|4)\d{4} - 查找以 5 或 4 開頭和后面的四位數字的數字。
然后 or 37\d{3} 查找 37 和后面的三位數字。
如果分隔符必須相同:
^(?=37|[54])\d{5}([-:\/])\d{5}\1\d{5}$
解釋
^
字符串開始(?=37|[54])
正面前瞻,向右斷言37
或5
或4
\d{5}
匹配5個數字([-:\/])
捕獲組 1 ,匹配其中之一-
:
/
\d{5}
匹配5個數字\1
反向引用以匹配與組 1 中相同的分隔符\d{5}
匹配5個數字$
字符串結尾請參閱regex101 演示。
const regex = /^(?=37|[54])\d{5}([-:\/])\d{5}\1\d{5}$/; [ "37344-37747-27744", "40344-37747-27744", "59344-37747-27744", "37344:37747:27744", "37344/37747/27744", "87887-98734-83422", "548aa:aa764:90887", "37759\\29938\\92093", "37344-37747/27744", "37344:37747-27744" ].forEach(s => console.log(`${s} --> ${regex.test(s)}`) )
沒有使用交替環視的模式:
^(?:37\d{3}|[54]\d{4})([-:\/])\d{5}\1\d{5}$
const regex = /^(?:37\d{3}|[54]\d{4})([-:\/])\d{5}\1\d{5}$/; [ "37344-37747-27744", "40344-37747-27744", "59344-37747-27744", "37344:37747:27744", "37344/37747/27744", "87887-98734-83422", "548aa:aa764:90887", "37759\\29938\\92093", "37344-37747/27744", "37344:37747-27744" ].forEach(s => console.log(`${s} --> ${regex.test(s)}`) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.