正则表达式:HTML表单验证中的/ Else条件

时间:2017-06-02 03:53:42

标签: php html regex html5 validation

我正在努力在正则表达式中创建一个If / Else语句来a)验证电话号码格式,然后b)使一组电话号码无效。

我目前有:

<input type="tel" name="mobilePhone" pattern="^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$">

作为定位以下电话号码格式的方式(澳大利亚的手机号码):

0414570776 0414 570 776

但是我们有很多0411 111 1110400000000个用户条目,我想在提交之前尝试清洗,但我似乎无法做到正确。

我想使一系列数字无效,但对于这个例子,这两个就足够了:0411 111 1110400000000

非常感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

解决方案

var re = /^\s*\+?04(\d)(?!\1\s*\1{3}\s*\1{3})\d\s*\d{3}\s*\d{3}\s*$/;

console.log(re.test('0411111111') ? 'pass' : 'fail', '"0411111111"');
console.log(re.test('0411 111 111') ? 'pass' : 'fail', '"0411 111 111"');
console.log(re.test('0400 000 000') ? 'pass' : 'fail', '"0400 000 000"');
console.log(re.test('0412345678') ? 'pass' : 'fail', '"0412345678"');
console.log(re.test('0412 345 678') ? 'pass' : 'fail', '0412 345 678');
console.log(re.test('+0412345678') ? 'pass' : 'fail', '"+0412345678"');
console.log(re.test('+0412 345 678') ? 'pass' : 'fail', '"+0412 345 678"');
console.log(re.test('0412   345   678') ? 'pass' : 'fail', '"0412   345   678"');
console.log(re.test('+0412   345   678') ? 'pass' : 'fail', '"+0412   345   678"');
console.log(re.test('       +0412       345      678        ') ? 'pass' : 'fail', '"       +0412       345      678        "');
<!DOCTYPE>
<html>
  <head></head>
  <body>
    <form>
      <input type='tel' name='mobilePhone' pattern='^\s*\+?04(\d)(?!\1\s*\1{3}\s*\1{3})\d\s*\d{3}\s*\d{3}\s*$' placeholder='enter phone number'>
      <input type='submit'>
    </form>
  </body>
</html>

解释

  • ^\s* - 从零个或多个空格字符开始
  • \+? - 后跟可选的+
  • 04 - 后跟文字04
  • (\d) - 后跟一位数字(第1组)
  • (?!...) - 未遵循

    • \1 - 第1组的值
    • \s* - 后跟零个或多个空格字符
    • \1{3} - 然后3次出现第1组的值
    • \s* - 后跟零个或多个空格字符
    • \1{3} - 然后3次出现第1组的值
  • \d - 后跟一位数字

  • \s* - 后跟零个或多个空格字符
  • \d{3} - 然后3次出现第1组的值
  • \s* - 后跟零个或多个空格字符
  • \d{3} - 然后3次出现第1组的值
  • \s*$ - 以零个或多个空格字符结尾