我試圖在Javascript中構建一個12小時的輸入組件,並且我想要驗證格式,因爲用戶類型,就像解析器驗證傳入令牌一樣。用於驗證12小時時間的Javascript正則表達式
我使用的反應,所以在每個渲染的字段值被傳遞trhough以下的正則表達式:
const validTime = /(0[1-9])|(1[0-2]):([0-5][0-9])\s((a|p|A|P)(m|M))/;
我測試,如果該值有效,如果我不能添加紅色邊框的輸入,但是通過這種方法,我可以寫任何東西,它不會被提交,但你可以寫如ajsjjsdf,我正在尋找不同的東西。允許用戶實時輸入上述正則表達式規則允許的字符。
編輯:
我加入一些代碼...
基本上simpliefied輸入爲:
<input
ref={(input) => {this[keyName] = input}}
className="form-control"
placeholder="09:00 AM"
value={scheduleTime ? scheduleTime.value : ''}
onChange={(ev) => this.onChangeTimeSchedule(ev, keyName)}/>
,值處理程序:
onChangeTimeSchedule = (ev, scheduleKey) => {
const validChar = /[0-9]|[aApPmM]|[\s\b]|:/;
const validTime = /(0[1-9])|(1[0-2]):([0-5][0-9])\s((a|p|A|P)(m|M))/;
const { value } = ev.target;
if(!validTime.test(value))
return;
const { schedule } = this.state;
schedule[scheduleKey] = {value, invalid: false};
this.setState({schedule});
};
如果我使用validChar它只會允許我想要的字符,但它會允許像10:aaaM這樣的字符串。
如果我在這種情況下使用了validTime(這是我爲每個渲染所做的檢查,爲無效添加紅色邊框),我總是返回false,因爲它除了完全匹配之外:10:0是錯誤的,10 :00 PM是正確的。
請張貼** **輸入 –
@PedroLobito更新了我的一些代碼問題的一個樣本。 –
我覺得可能存在一種更簡單的方法,但是如果您根據文本的長度做了if語句,該怎麼辦?由於時間是如此結構化,如果輸入的第一個字母不是0或1,則在輸入的左側附加0。如果長度爲2,則附加一個:如果長度爲5則追加一個空格。然後基於輸入的長度進行驗證。如果字符類型對於該長度無效,請刪除字符。 –