2012-03-05 19 views
1

I以下の機能を持っている:JavaScriptの正規表現のエラー

function checkRegexp(o, regexp, n) { 

      if (!(regexp.test(o.val()))) {     
       return false; 
      } else { 
       return true; 
      } 
     } 

このコードは正しくメールアドレスを検証します。

checkRegexp(numberId, "^[0-9]", "enter only number"); 

しかし、私:これは、数字をチェックすることになっている

checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "incorrect email "); 

このエラーが発生する:regexp.test is not a function

+1

、以下のように.test機能

変更を呼び出すためにRegExpオブジェクトである必要がありますか? –

+0

正規表現は文字列ではありません –

答えて

5

、それは/なし

checkRegexp(numberID, /^[0-9]/, "enter only number"); 

する必要があり、JSは、あなたがそれになりたい知る方法はありません正規表現。

+0

助けてくれてありがとう –

1

スラッシュで区切られたもの(/^[0-9]/)は、RegExpオブジェクトです。 "^[0-9]"は文字列で、.test()を呼び出すことはできません。

代わりにこれを試してください:あなたはnumberIdは数字のみが含まれていることを確認したい場合は

またcheckRegexp(numberId, /^[0-9]/, "enter only numbers");

は、あなたが実際にしたい:

checkRegexp(numberId, /^[0-9]+$/, "enter only numbers");

基本的には、そこを確認してください1つまたは複数の数字だけです[0-9]+、最初の数字と^の間最後の$

2

正規表現の代わりに文字列を渡しています。

試してください:あなたは、文字列ではなく、正規表現を渡している

checkRegexp(numberId, /^[0-9]/, "eneter only number"); 
+0

助けてくれてありがとう –

2

まず、あなたは、ない正規表現文字列が渡さ:

"^[0-9]" // string 
/^[0-9]/ // regexp 

第二に、私はあなたが、例えば以来^[0-9]+$を意味推測します"1a"が今すぐ渡されます。これは数字だけではありません。

+1

'/^[0-9] * $ /'では+1しますが、 '/^[0-9] + $ /'でもオプション。最初の文字列は空文字列を許可し、後者は空文字列を許可しません。 – Arjan

0

正規表現の代わりに文字列を入力します。 これは動作します:

checkRegexp(numberId, /^[0-9]/, "eneter only number"); 
0

最後の文で二重引用符を使用しています。

これを試してみてください:

checkRegexp(numberId, /^[0-9]/, "eneter only number"); 
2

正規表現はCached regex are actually faster than this solutionがある最も遅い親切です。しかし、私は参照のためにそれをここに残しています:-)。それが数値であるかどうかをテストするには、この機能を使用することができます。

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

出典:https://stackoverflow.com/a/1830844/851498

P.S:あなたのコードが間違っている理由は、他の答えは、私はあなたのよりよい解決策を表示することを好む、を教えてくれます。

+0

これを何度もやっていない限り、パフォーマンスの差はごくわずかです。おそらくフォーム検証のために数回それをやっているようです。しかし、私は組み込み関数を使用する方がおそらくより良い方法であることに同意します。 –

+0

キャッシュされた正規表現のリテラルは、 'parseFloat'を省略しても高速です(chrome 17)。 http://jsperf.com/numeric-checks –

+0

正規表現がJSで最も遅いと思ったので、私はこれに驚いています。良いことが分かっていれば悪い –

0

/ /が不足しているか、new RegExp("^[0-9]")を使用しています。それは質問である何

checkRegexp(numberId, /^[0-9]/, "eneter only number");