我有這樣的正則表達式:這個正則表達式可以簡化嗎?
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$
我需要只這些電話號碼的格式相匹配:
- (555)555-5555
- (555)555-5555
- 555-555-5555
- 555.555.5555
有什麼辦法可以簡化我目前的正則表達式嗎?
我有這樣的正則表達式:這個正則表達式可以簡化嗎?
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$
我需要只這些電話號碼的格式相匹配:
有什麼辦法可以簡化我目前的正則表達式嗎?
使用RegexBuddy表演:
\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b
感謝您的回答,但某些匹配得不到。我只需要嚴格匹配上面提到的格式。我不能混用「。」用「 - 」表示。 – Bazinga
就個人而言,我不會理會驗證用戶的格式。無論你想出什麼可能會在某些情況下失敗。我認爲接受寬鬆的投入會更好,並盡力糾正。
老實說,誰在乎()
,-
和.
當你需要的只是10位數?您可以輕鬆地在後端添加格式。
相反,我會做這樣的事情
// ugly user input, but still valid
var userInput = "(500) 423.2345";
// remove all non-digits
var phone = userInput.replace(/\D/g, '');
//=> "5004232345"
// verify that 10 digits are present
if (phone.length !== 10) {
alert("invalid phone number");
}
然後你就可以將號碼存儲你的任何格式,你想
// example
[
"(",
phone.substr(0,3),
")",
phone.substr(3,3),
"-",
phone.substr(6,4)
].join(" ")
// "(500) 423 - 2345"
可以簡化一點,避免如果幾個備選方案使用捕獲組來捕獲分隔符和反向引用\1
以重用它:
^(?:\(\d{3}\) ?\d{3}-\d{4}|\d{3}([.-]?)\d{3}\1\d{4})$
如果你'想要**嚴格**然後保持原樣。 – hwnd
@hwnd我相信你是對的。對於正則表達式我還是個新手,所以我想在投入之前先與一些超級大師進行驗證。謝謝。 – Bazinga
我希望你不是要驗證電話號碼字段。處理電話號碼的正確方法是去掉非數字字符,然後評估數字序列。 – zzzzBov