脚本捕获5x2输入字段。
if (!$zeit_[1])
{&error('Bitte geben Sie mindestens eine Aktivität an!');}
我的问题是这个验证(必须填写第一个输入):
error
验证子程序if ($zeit_[1])
{&error('Bitte geben Sie mindestens eine Aktivität an!');}
在所有情况下都会发生。空输入,并且还填充了一个或所有五个输入。
当我对验证进行否定时
error
$zeit_[1]
也会发生。我认为问题在于变量#
当我使用for ($i=0;$i<6;$i++)
禁用验证时 - 脚本运行正常。输出显示所有10个元素。
可能有人给我一个提示吗?
将for ($i=1;$i<6;$i++)
更改为for ($i=1;$i<6;$i++) {
$zeit_[$i] = $q->param("zeit_[$i]");
$tatigkeit_[$i] = $q->param("tatigkeit_[$i]");
##validation
if (!$zeit_[1])
{&error('Bitte geben Sie mindestens eine Aktivität an!');}
if ($zeit_[$i] =~ /\D/)
{&error('Die Zeitangabe zur Aktivität "'. $tatigkeit_[$i] . '"enthält ein unzulässiges Zeichen! Bitte geben Sie nur ganze Zahlen an!');}
if ($tatigkeit_[$i] =~ /[^A-Za-z0-9öäüÖÄÜß-\s]/)
{&error('Die Tätigkeit "' . $tatigkeit_[$i] . '" enthält ein unzulässiges Zeichen!');}
#prepare the output
if ($zeit_[$i]) {$ausgabe.= $zeit_[$i] . " mit " . $tatigkeit_[$i] . " ID: $i<br>";}
}
print "Content-type: text/html\n\n";
print $ausgabe; exit();
。正确的代码:
#include <iomanip>
#include <iostream>
#include <unicode/uchar.h>
#include <tao/pegtl.hpp>
using namespace tao::TAO_PEGTL_NAMESPACE; // NOLINT
namespace test
{
template< UProperty P >
struct icu_has_binary_property
{
using analyze_t = analysis::generic< analysis::rule_type::ANY >;
template< typename Input >
static bool match( Input& in )
{
// this assumes the input is UTF8, adapt as necessary
const auto r = internal::peek_utf8::peek( in );
// if a code point is available, the size is >0
if( r.size != 0 ) {
// check the property
if( u_hasBinaryProperty( r.data, P ) ) {
// if it matches, consume the character
in.bump( r.size );
return true;
}
}
return false;
}
};
using icu_lower = icu_has_binary_property< UCHAR_LOWERCASE >;
using icu_upper = icu_has_binary_property< UCHAR_UPPERCASE >;
// clang-format off
struct grammar : seq< icu_upper, plus< icu_lower >, eof > {};
// clang-format on
}
int main( int argc, char** argv )
{
for( int i = 1; i < argc; ++i ) {
argv_input<> in( argv, i );
std::cout << argv[ i ] << " matches: " << std::boolalpha << parse< test::grammar >( in ) << std::endl;
}
}
答案 0 :(得分:2)
我猜这是一个简单的拼写错误。但是你没有向我们展示你期望的输入数据,所以除了猜测之外别无他法。
(我也猜测这是一个使用CGI.pm编写的CGI程序 - 如果你能在你的问题中指出这一点会更好。)
在验证中,您有:
if (!$zeit_[1])
但在其他验证线上,你有:
if ($zeit_[$i] =~ /\D/)
在一个案例中检查$zeit_[1]
而在其他案例中检查$zeit_[$i]
似乎没有意义。在任何情况下,$zeit_[1]
都不会在循环的第一次迭代中设置(其中$i
为0,因此$zeit_[1]
将不会给出值。)< / p>
其他一些Perl提示:
for ($i=0;$i<6;$i++)
,for my $i (0 .. 5)
会更容易理解。&
。 error(...)
与&error(...)
一样有效(并且不会让非Perl程序员感到困惑)。$q->param(...)
的调用暗示你是),那么你可以使用$q->header(...)
来创建CGI标题。更新:考虑到我们所学到的一切,我会写得更像这样:
for my $i (0 .. 5) {
$zeit_[$i] = $q->param("zeit_[$i]");
$tatigkeit_[$i] = $q->param("tatigkeit_[$i]");
##validation
if ($i == 1 and !$zeit_[$i]) {
error('Bitte geben Sie mindestens eine Aktivität an!');
}
if ($zeit_[$i] =~ /\D/) {
# Interpolate variables in double-quoted strings
error("Die Zeitangabe zur Aktivität '$tatigkeit_[$i]' enthält ein unzulässiges Zeichen! Bitte geben Sie nur ganze Zahlen an!");
}
if ($tatigkeit_[$i] =~ /[^A-Za-z0-9öäüÖÄÜß-\s]/) {
error("Die Tätigkeit '$tatigkeit_[$i]' enthält ein unzulässiges Zeichen!");
}
#prepare the output
if ($zeit_[$i]) {
$ausgabe.= "$zeit_[$i] mit $tatigkeit_[$i] ID: $i<br>";
}
}
print $q->header;
print $ausgabe;
exit();