半角英数字のみであることを判断するには

[上に] [前に] [次に]
やま [E-Mail] 1998/11/17(火) 01:07:52
半角英数字のみを許可する判断をさせたいのですが、現在

  if(!($test =~ /[\da-zA-Z]+/)) {ダメ} else {OK}

としているのですが、$testに全角が入っているときでも
OKに処理が行ってしまいます。
詳しい方、解決方法をお願いいたします。

B-Cus 1998/11/17(火) 01:19:49

if( $test =~ /[^\da-zA-Z]/ ) {ダメ} else {OK}

if( $test !~ /^[\da-zA-Z]+$/ ) {ダメ} else {OK}
ではいかがでしょうか。

やま [E-Mail] 1998/11/17(火) 01:52:43
すいません。ひとつ書き忘れていました。
$testは複数文字が入っています。たとえば、
ab12cd34ef      ... OK
123愛45上xyz尾  ... NG
といった具合に判断したいです。

B-Cus 1998/11/17(火) 02:05:36
複数文字であっても上の方法でうまくいきませんか?

やま [E-Mail] 1998/11/17(火) 02:18:24
[[解決]]
ありがとうございました。スピード解決です。
上記の方法でうまく行きました。
この手の正規表現、条件判断がもうひとつよくわからないのです。
どこか詳しい説明(でも易しい説明)は、ありませんでしょうか?

Tiot [HomePage] 1998/11/17(火) 02:50:09
http://www.tohoho-web.com/wwwperl1.htm#Exprとか。
ちなみにif(!($test =~ /[\da-zA-Z]+/)) {ダメ} else {OK} は
まず、$test =~ /[\da-zA-Z]+/ >> 英数字がひとつでもあれば真。
それを!で、真偽を反転させるので、とにかく英数字が入っていれば良いということに
なってしまいます。
B-Cusさんのif( $test =~ /[^\da-zA-Z]/ ) {ダメ} else {OK} は、
は、[^\da-zA-Z]で英数字以外を検出して、入っていればダメというふうにしています。
よいものを探すというより、だめなものを探すという考え方です
(○○禁止という場合はこうすることが多いです)。
蛇足かとも思いましたが。

B-Cus 1998/11/17(火) 23:25:26
> どこか詳しい説明(でも易しい説明)は、ありませんでしょうか?

perl(特にperl5)は伝統的な正規表現以外にも、独自の正規表現を
ばんばん採用してるので、本を買った方がいいのではないでしょうか。

やはり定番はラクダ本ですかね?

Tiot [HomePage] 1998/11/18(水) 00:28:55
王道はやはりラクダ本なのかな?
個人的には、(今手元にないのであいまいですが)、
技術評論社かどっかからでてる、白地に黄色と黒のデザインの
「パールハンドブック」とか、なんとかが割とわかりやすく
まとまっていたので良かったと思います。
この本は、それ以外の部分もよくできていて
パールの教科書としてはおすすめ。
ただCGIに関しては何もかいてありません。

[上に] [前に] [次に]