2011-08-11 4 views
0

名前を入力する際に​​フォームの検証を少し作成しようとしています 特定の文字、既に作成された名前、および内部予約語は許可しません。問題は、私が "pos"にマッチして失敗したという名前の中に "posts"を入れたいと言うことです。エラーのためにjavascript内の単語だけを一致させたい

if (filterName.match("\\b"+badchar[char]+"\\b")) 

\bため

var badchar = new Array('"', "," , "'" , "#", "&", "!", "@", "$", "+", ";", ":", "*", "(",")", "[","]","{","}", "/", "="); 
    var resword = new Array("positive","pos","negative","neg","neutral", "neu","twitter","itunes","facebook","android","forums","RSS Feeds"); 

    var existingNames = @anames; 
    var valueLen = $("#aname").val().length; 
    var fail=false; 

    var filterElem = $('#aname'); 
    var filterName = $('#aname').val(); 

    $.each(badchar, function(char){ 
     if (filterName.indexOf(badchar[char]) != -1) { 
      console.log("bad character") 
      filterElem.css('border','2px solid red'); 
      window.alert("You can not include '" + badchar[char] + "' in your Filter Name"); 
      fail = true; 
     } 
    }); 

    $.each(resword,function(){ 
     if (filterName.match(this)) { 
       console.log("bad word"); 
       filterElem.css('border','2px solid red'); 
       window.alert("You can not include '" + this + "' in your Filter Name"); 
       fail = true; 
      } 
    }); 
+0

フォームのコンテキストと検証を使用している特定の入力とは何ですか? – RobB

答えて

4

は、このラインを交換してみてください -

このため
if (filterName.match(this)) { 

-

var re = new RegExp("\\b" + this + "\\b","g"); 
if (filterName.match(re)) { 

これはあなたの悪い言葉に基づいて動的な正規表現を構築し、それが全体の単語である場合にのみ単語と一致する必要があります。

1

スワップ

if (filterName.indexOf(badchar[char]) != -1) 

は、あなたがそれを設計しているかであるあなたのコードに基づいて単語の境界

+0

'\ b'を意味しますか? '\ w'は単語文字の正規表現です。 – numbers1311407

+0

申し訳ありません - あなたはあなたです –

0

をマッチングするための正規表現です。あなたは何を達成しようとしていますか?予約語リストの単語を、自分自身であるか、入力されたコンテンツのどの部分にも存在する場合にのみ、禁止しますか?前者の場合は、意図しないアイテム(つまり「投稿」が「pos」と一致します)と一致するので、indexOfを使用したくないです。入力したコンテンツに予約語を一切許可しない場合は、デザインを再考する必要があります。入力されたコンテンツのどの部分にも "pos"を許可しないことはかなり厳しいです。

0

この質問がヘッダーで尋ねられるように、私は若干異なる質問が予想されます。私は何を探していたのか分かりませんでした。ヘッダーで質問された質問のためにそれを解決しました。

これは、単語全体を検索して検索します。それは部分的に一致するべきではありません。 3つのグループが返されます。前の文字、単語、および後の文字。前後の文字は何もないことがあります。

JSフィドル例:http://jsfiddle.net/g8ns3/

var e = new RegExp('(\b|^|[^A-Za-z])(Word)(\b|$|[^A-Za-z])', 'gi'); 
var text1 = 'Example word. Even when word, is next to a symbol.Word'; 
var text2 = 'Word Example'; 
var text3 = 'Example Word'; 
var text4 = 'word'; 

if (text1.match(e)) 
    console.log('Found Match Inside 1'); 

if (text2.match(e)) 
    console.log('Found Match Inside 2'); 

if (text3.match(e)) 
    console.log('Found Match Inside 3'); 

if (text4.match(e)) 
    console.log('Found Match Inside 4'); 

console.log(text1.replace(e, '($1)($2)($3)')); 
console.log(text2.replace(e, '($1)($2)($3)')); 
console.log(text3.replace(e, '($1)($2)($3)')); 
console.log(text4.replace(e, '($1)($2)($3)')); 

これは、検出またはほとんどの場合、交換のためにかなり適しています。 HTML + Textを置き換える場合、目的の単語でタグ属性またはタグ属性がある場合、タグまたはタグ属性を置き換えるなどの予期しない結果が生じることがあります。

関連する問題