1

サーバー側の検証に preg_match を使用しましたが、クライアント側も使用したいと考えています。

私のPHPでは、これらの文字を許可します:

'/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/'

match()JavaScriptで文字のホワイトリストを作成するにはどうすればよいですか?

編集:

これを試しましたが、何らかの理由で機能しませんでした:

私のデバッガーは、if ステートメントの直前に次のように言います。

218SyntaxError: Invalid regular expression: range out of order in character class

$('#title').blur(function(){
      input = $('#title').val();
      var invalidChars = /^[^a-z][^a-z\d .:-,!?]+$/i;
    if (!invalidChars.test(input)){
         alert('true');     
         }
      else {
           alert('false');
           }
});
4

4 に答える 4

3

上記の答えはすべて正しいですが、補足事項として、書く代わりに[A-Za-z]単純なもの/[a-z]/iで十分です。はi大文字と小文字を区別しないフラグです...

于 2012-04-13T20:38:19.760 に答える
2

以下を試してください

var text = ...;
if (text.match(/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/)) {
 ...
}
于 2012-04-13T20:34:09.033 に答える
2
var validChars = /^[a-z][a-z\d .:\-,!?]+$/i;
if (validChars.test(myText)){ ... }

を使用すると、一致が存在するかどうかを知りたいだけの場合regex.test(str)よりもパフォーマンスがわずかに向上します。str.match(regex)

または、無効な文字が表示された場合は早期に終了できます。

var invalidChars = /^[^a-z][^a-z\d .:\-,!?]+$/i;
if (!invalidChars.test(myStr)){
  // we passed
}

これにより、許可されていない文字が検出された瞬間に正規表現テストを停止できます。

于 2012-04-13T20:35:12.323 に答える
2

実際にはそれは反対です:

var regexp = /^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/;

if (regexp.test(text)) {


}
于 2012-04-13T20:35:55.037 に答える