【问题标题】:validate input using regex pattern使用正则表达式模式验证输入
【发布时间】:2021-11-04 06:06:37
【问题描述】:

我想像这样验证电话号码

  1. 08xxxxxxxx
  2. 08xxxxxxxxxxxx
  3. 08xxxxxxxxxxxxxxx

第一个和第二个数字必须是08,后面是其他数字,最少10位,最多15位

我已经尝试过这段代码

<form>
<input type="tel" name="no_hp" class="form-control" pattern="[0]{1}[8]{1}[0-9]" maxlength="15" oninvalid="this.setCustomValidity('Nomor telepon harus di awali dengan 08 dan minimal 10')" required>
 
 <input type="submit">
</form>

在下面的视频中,我尝试输入089 并成功,但尝试没有至少 10 位数字

但在下面的视频中,如果我尝试输入错误的第一个数字,例如189,然后我更新为与第一个视频089 相同的正确数字,它仍然说数字是错误的。

那么为什么在我更正了数字格式(以08 开头)后,它仍然说数字是错误的?如何解决?

【问题讨论】:

    标签: html regex


    【解决方案1】:

    我认为您可以直接在输入字段上使用以下正则表达式作为模式,或者使用javascript 执行相同操作并向用户显示警告消息。

    JS 方法

    const regex = new RegExp('^08[0-9]{8,13}$', 'gm');
    if (regex.test('088884444714255')) {
      console.log('valid number');
    }else{
      console.log('invalid number');
    }
    
    if (regex.test('0888844447142555')) {
      console.log('valid number');
    }else{
      console.log('invalid number');
    }
    
    if (regex.test('078844447142555')) {
      console.log('valid number');
    }else{
      console.log('invalid number');
    }

    HTML 模式方法

    <form>
      <input type="tel" name="no_hp" class="form-control" pattern="^08[0-9]{8,13}$" oninvalid=" this.setCustomValidity('Nomor telepon harus di awali dengan 08 dan minimal 10')" oninput="this.setCustomValidity('')" required>
      <input type="submit">
    </form>

    【讨论】:

    • 只使用html不使用javascript可以吗?
    • @E-Place 我已经更新了我的答案,向您展示jshtml 的方法。
    • 我在我的程序中尝试过,我从你的代码中run code snippet,这是同样的错误。请看视频gifyu.com/image/e5uJ
    • 糟糕!我之前将其限制为[0-8]。它应该是[0-9]。现已更正。
    • 哦,它的工作。但是,如果我尝试使用 oninvalid="this.setCustomValidity('Nomor telepon harus di awali dengan 08 dan minimal 10')" 自定义消息,则在我更正号码后它总是错误的。就像我问题中的第二个视频一样。或者有其他方式来自定义消息?
    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多