2016-11-10 7 views
-3

これは学校のプロジェクトの一部です。私は正規表現で何が問題なのか理解できません。私はもっ​​と仕事をしていますが、これらは私に苦労しています。 Apacheはどこに間違っていたのかを正確に伝えません。PERL:正規表現には何がないのですか?

姓と名が姓に2人の単純な名前と出力にする必要があり、ファーストネーム形式

my $name = param('name'); 

if($name =~ {2}) { 
    print "Name will be stored as $2, $1<br/><br/>"; 
} else { 
    print "Bad name. Enter just two names, your first and last<br/><br/>"; 
} 

パスワードは、正規表現の順でなければなりません。 1つの大文字、2桁、1つの空白、2〜3小文字、1つの特殊文字(文字または数字ではない)から始めます。

my $password = param('password'); 

if ($password =~ /[A-Z]+\d{2}+\s+[a-z]{2,3}+-]\^$/) { 
print "Password $password was accepted<br/><br/>"; 
} else { 
print "Bad password, $password was not accepted<br/><br/>"; 
} 
+1

あなたの正規表現で '+'をチェックします。どうすればいいですか? –

+0

私はこれがクラスの割り当てであることを認識していますが、[パスワードチェッカーは古くなっています](http:// stackoverflow。com/a/39710490/14660)。 – Schwern

+0

@Schwern私は要件を管理していません。( '($パスワード=〜/ [AZ] + \ d {2} + \ s + [az] {2,3} + - ] \^$ /)' –

答えて

2

それはあなたがやろうとしている、とあなたは

​​

事がで正規表現ではありませんあなたを教えていますのために、あなたの宿題をするために他の人々を取得しているものを言うのは難しいですすべて:匿名のハッシュ{ 2 => undef }を構築し、文字列化された参照をパターンとして使用しています。それはとてもそれが

を仕事に行くのではなく、この1つはそれがA99 aaa-]^のようなものと一致しますが、それはあなたが望むものであるならば、私は疑う

$password =~ /[A-Z]+\d{2}+\s+[a-z]{2,3}+-]\^$/ 

不可解であるHASH(0x71c328)のようなものになります。 {2,3}の後にプラス記号+とは何ですか?

+0

2入力(最初と最後)の '$ name =〜{2}' '$ password =〜/ [AZ] + \ d {2}は特殊文字でなければなりません。 } + \ s + [az] {2,3} + \ - ] \^$/'これはもっと似ていますか? ' M12 abc @ 'のようにする必要があります –

+2

@LauraLee:正規表現のパターン。それは合理的なPerlの構文でもありません。 – Borodin

6

Apacheはあなたが間違っていた場所を正確には教えてくれません。

まず、Apacheエラーログを探します。実際のエラーが含まれます。それがどこにあるかはわかりませんが、/var/logで始まります。

第2に、Webサーバーを介してコードをデバッグするだけでは、状況がより困難になります。デバッグのためにコマンドラインで引数を受け入れることができるCGI.pmをおそらく使用しています。

perl /path/to/your/program name='Michael Schwern' 

次に、turn on strict and warnings。彼らはこのような誤字や間違いを指摘します...

$ perl -w ~/tmp/test.plx name=foo 
Odd number of elements in anonymous hash at /Users/schwern/tmp/test.plx line 5. 
Bad name. Enter just two names, your first and last<br/><br/> 

これはこれです。

​​

これは、キー2と未定義の値を持つ匿名のハッシュを作成すると言います。次に、それをHASH(0x7fca01805668)のようなものに文字列化し、それを正規表現として使用します。言い換えれば、ナンセンス。

あなたが探しているのは、いくつかのスペースで区切られた2つの単語を探すようなものです。

$name =~ m{^(\w+)\s+(\w+)$}; 

詳細はPerl regex tutorialをお読みください。

+0

なぜそれはしないのですか?CGI :: Carp( 'fatalsToBrowser') 'を使用します。 – mkHun

+1

@mkHunあなたもそれを使うことができます。私の最初の選択ではない)A)人々は忘れて、それを生産中に残す(私は環境変数があることを望む)、B)エラーメッセージを得ることはthあなたのWebコードをコマンドラインからローカルに実行することができるのは良いことですし、C)mod_perl 2に問題があるようです。 – Schwern

関連する問題