如果条件在验证测试中无法正常工作

时间:2019-04-16 04:19:42

标签: javascript jquery

我已经编写了验证测试,但满足if条件 即使不应该这样做。

这是我的代码:

function chk_val() {

  var name = $('.info .name').val();
  var birth = $('.info .birth').val();
  var phone = $('.info .phone').val();
  var eng_kor = /^[가-힣a-z]+$/gi;
  var num = /^[0-9]+$/g;

  if (name == '' || birth == '' || phone == '') {
    alert('1');
  } else if (!eng_kor.test(name)) {
    alert('2');
  } else if (!num.test(birth)) {
    alert('3');
  } else if (birth.length != 8) {
    alert('4');
  } else if (!num.test(phone)) {
    alert('5');
  } else if (phone.length != 10 && phone.length != 11) {
    alert('6');
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="info">
  <input class="name" type="text" />
  <input class="birth" type="text" maxlength="8" />
  <input class="phone" type="text" maxlength="11" />
</div>
<button onclick="chk_val()">Check</button>

我写了namewonki),birth19890222)和phone01012341234),然后单击{{ 1}}。它可以传递所有button(onclick="chk_val()")语句,但被ifalert('3')捕获。

我使用alert('5')来检查console.lognum.test(birth)的值,结果为TRUE。

我不知道为什么我不能通过num.test(phone)if(!num.test(birth))

2 个答案:

答案 0 :(得分:1)

如其中一条注释中所述,您需要从正则表达式中删除全局标志(/ g)。

  

如果正则表达式设置了全局标志,则test()将使   正则表达式的lastIndex。随后使用test()将启动   搜索由lastIndex(exec()将指定的str的子字符串   还可以推进lastIndex属性)。值得注意的是   测试其他字符串时,lastIndex不会重置。

Reference link

答案 1 :(得分:1)

您只需要将RegExp更改为数字

app.Map("/specificpath", subApp => {
    subApp.Use(async (context, next) =>
    {
        if (!context.User.Identity.IsAuthenticated)
        {
            context.Response.StatusCode = StatusCodes.Status401Unauthorized;
        }
        else if(context.Request.Path.StartsWithSegments("/specificpath/User1") && context.User.Identity.Name != "User1")
        {
            context.Response.StatusCode = StatusCodes.Status401Unauthorized;
        }
    });
});

app.UseStaticFiles();
function chk_val() {

  var name = $('.info .name').val();
  var birth = $('.info .birth').val();
  var phone = $('.info .phone').val();
  var eng_kor = /^[가-힣a-z]+$/gi;
  var num = new RegExp('^\\d+$');

  if (name == '' || birth == '' || phone == '') {
    alert('1');
  } else if (!eng_kor.test(name)) {
    alert('2');
  } else if (!num.test(birth)) {
    alert('3');
  } else if (birth.length != 8) {
    alert('4');
  } else if (!num.test(phone)) {
    alert('5');
  } else if (phone.length != 10 && phone.length != 11) {
    alert('6');
  }
}