アプリ版:「スタンプのみでお礼する」機能のリリースについて

JavaScriptの(正確にはJavaScriptのみというわけでは無く、どの言語にもいえることなのですが、)正規表現を使って、以下のような書き方を不許可にしたいのですが、なかなかうまくいきません。

絶対条件は、英数字のみです。
禁止にしたい:-hoge、hoge-、_hoge、hoge_
しかし、これはOK:ho-ge、ho_geなどなど........


ようするに、先頭末尾に-(ハイフン)_(アンダーバー)の使用を禁止にしたいのです。

但し以下の場合に使わなければなりません。


function check( str )
{
if( str.match(/ここに制御文/) )
return false;
else
return true;
}

↑ みたいな関数があって、下記のような処理をほどこしています。

if( !check( str ) ){
alert( strMsg );
return false;
}


わかりづらい内容かもしてませんが、
どなたご教授いただけば幸いです。
宜しくお願いいたします。

A 回答 (1件)

一般的な記述としては、


^[^\-_].*[^\-_]$
になると思います。

先頭に一致(^)した文字が「-」(\-)ないし「_」(_)以外([^\-_])で、かつ、末尾に一致($)した文字も同じパターン([^\-_]$)であって、任意の文字列(.*)

以下に、テストに用いたjscriptを書いておきます。
(JavaScriptでテストしていませんのでご確認願います)

windowsでwshが使用できる環境であれば、下記内容をtest.jsとして保存し、コマンドプロンプトから
wscript test.js
ないし
cscript test.js
として実行可能です。

// ここから test program
var re = "^[^\-_].*[^\-_]$";
var s, r;
s = "-abc";
r = s.match(re);
WScript.Echo(s + " match(" + re + ") = " + r);
s = "_abc";
r = s.match(re);
WScript.Echo(s + " match(" + re + ") = " + r);
s = "a-bc";
r = s.match(re);
WScript.Echo(s + " match(" + re + ") = " + r);
s = "ab_c";
r = s.match(re);
WScript.Echo(s + " match(" + re + ") = " + r);
s = "abc-";
r = s.match(re);
WScript.Echo(s + " match(" + re + ") = " + r);
s = "abc_";
r = s.match(re);
WScript.Echo(s + " match(" + re + ") = " + r);
// ここまで


cscript test.jsでの実行結果
===
-abc match(^[^-_].*[^-_]$) = null
_abc match(^[^-_].*[^-_]$) = null
a-bc match(^[^-_].*[^-_]$) = a-bc
ab_c match(^[^-_].*[^-_]$) = ab_c
abc- match(^[^-_].*[^-_]$) = null
abc_ match(^[^-_].*[^-_]$) = null
    • good
    • 0
この回答へのお礼

詳しいソースまで記載していただき、非常にうれしく思います。

JavaScriptで実装しましたが、うまくいきました。

以下のようにすれば、理想通りに動いてくれました。
^[^\-_][a-zA-Z0-9-_\.]+[^\-_]$
 
非常に有用なアドバイスありがとうございました。

お礼日時:2009/09/12 08:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!