0

我正在尝试编写一个页面来在我们的系统中查找票证。所有门票都遵循以下格式(6 位数字,破折号,后跟 6 位数字):

123456-789123 

我创建了一个 HTML 表单来请求用户并将其重定向到结果:

<section class="is-search">
  <form method="get" action="http://mytesturl.com/tickets/lookup/info.php">
    <input type="text" class="text" name="ticket" placeholder="Search by Ticket #" />
  </form>
</section>

目前,如果有人输入“potato”,表单将提交并抛出几个错误,因为 API 显然无法搜索“potato”或其他不符合票证格式的内容。

我已经看到了一些关于使用 JavaScript 的建议,但是,由于我不熟悉 JS,所以我无法使我的语法对票证格式正确,并且很好奇在 PHP 中是否有更好的方法来做到这一点。

在提交给 API 之前验证输入是否遵循这种格式的最佳方法是什么?

4

5 回答 5

1

您是否尝试过使用正则表达式(regex)。这可能会有所帮助...

http://php.net/manual/en/function.preg-match.php

于 2013-09-13T17:45:54.500 回答
0

您可以先将 HTML 属性添加pattern="\d{6}\-\d{6}input标签中。然后考虑添加 JavaScript 检查,以覆盖不支持pattern但启用了 JavaScript 的浏览器。

于 2013-09-13T18:03:48.000 回答
0
    <input type="text" class="text" name="ticket" placeholder="Search by Ticket #" onchange="myFunction()" />

myFunction(){
    var value = $(".text").val();
    if (/([0-9]{6}\-[0-9]{6})/.test(value)) {
         $("input[type=submit]").removeAttr("disabled");
    } else {
         $("input[type=submit]").attr("disabled", "disabled");
    }
}

<?php

if (preg_match('/([0-9]{6}\-[0-9]{6})/', &_POST['ticket'])) {
//execute code
}
于 2013-09-13T17:47:39.117 回答
0

正则表达式应该适用于此,无论是在 javascript 还是 PHP 中,例如:

$('.text').on('change', function() {
    if (this.value.match(/^[0-9]{6}\-[0-9]{6}$/)) {
        alert('ok');
    }else{
        alert('not valid');
    }
});

小提琴

正如 Jason 在评论中所指出的,javascript 验证只是为了方便,任何用户输入都应该在服务器端再次验证。

编辑:

如果由于某种原因您还需要验证部分?

$('.is-search form').on('submit', function(e) {
    e.preventDefault();
    if ($('.text', this).val().match(/^[0-9]{6}\-[0-9]{6}$/)) {
        this.submit();
    }else{
        alert('not a valid ticket number')
    }
});

小提琴

于 2013-09-13T17:48:07.687 回答
0

在提交表单之前使用正则表达式检查格式

//on click, when the form is about to be submitted
$("#submit").click(function (e){
    //prevent the submission unlit we check for valid format
    e.preventDefault();
    //check for valid format using regular expression test
    if(/([0-9]{6}\-[0-9]{6})/.test($("input[name=ticket]").val())){
        //submit
        $("#search-form").submit();
    }
    else{
        //display error
        alert("error");
        $("input[name=ticket]").val("");
    }
});

这是一个例子

于 2013-09-13T17:57:40.920 回答