我正在尝试编写一个页面来查找我们系统中的票证。所有门票均采用以下格式(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>
目前,如果有人输入&#34; potato&#34;,表单将提交并抛出多个错误,因为API显然无法搜索&#34; potato&#34;或其他任何不遵循票证格式的内容。
我已经看到了一些关于使用JavaScript的建议,但是,我无法让我的语法格式正确,并且很奇怪是否有更好的方法在PHP中执行此操作因为我不熟悉JS 。
在提交API之前,验证输入是否遵循此格式的最佳方法是什么?
答案 0 :(得分:1)
您是否尝试过使用正则表达式(正则表达式)。 这可能会有所帮助......
答案 1 :(得分: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
}
答案 2 :(得分: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')
}
});
答案 3 :(得分: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("");
}
});
这里是EXAMPLE
答案 4 :(得分:0)
您可以先将HTML属性pattern="\d{6}\-\d{6}
添加到input
标记中。然后考虑添加JavaScript检查,以涵盖不支持pattern
但启用了JavaScript的浏览器。