我對正則運算式不是很好,但我在前端使用以下內容與 Joi 一起從電話號碼中洗掉空格以進行驗證。它似乎作業:
輸入:0758541287 8
有效的:
Joi.string().trim().replace(/\s*/g,"").pattern(new RegExp(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/))
我的服務器使用express-validator,我很驚訝這并沒有洗掉空格:
無效:
body('phone')
.isString()
.replace(/\s*/g,"")
.matches(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/)
.withMessage('Please enter a UK phone number'),
也不作業:
body('phone')
.isString()
.custom(value => Promise.resolve(value.replace(/\s*/g, "")))
.matches(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/)
.withMessage('Please enter a UK phone number'),
驗證錯誤:
validationErrors: [
{
value: '0748431287 8',
msg: 'Please enter a UK phone number',
param: 'phone',
location: 'body'
}
],
我可以在提出請求之前洗掉空格,但我很想知道為什么這不像我想象的那樣表現?
uj5u.com熱心網友回復:
您的自定義驗證方法回傳undefined(因為這就是console.log(...)回傳的內容),這被解釋為該欄位無效。
此外,檔案replace沒有提到正則運算式。也許它只替換子字串?
最后,matches也沒有出現在檔案中。
您可以使用普通的 Javascript 函式replace和match自定義驗證方法:
body("phone")
.isString()
.custom(value => value.replace(/\s*/g, "")
.match(/^0([1-6][0-9]{8,10}|7[0-9]{9})$/))
.withMessage("Please enter a UK phone number")
uj5u.com熱心網友回復:
您可以使用正則運算式或 value.replaceAll(' ', '');
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/486672.html
標籤:javascript 正则表达式 表示
上一篇:為什么不從背景關系重繪選擇元素?
