2016-04-19 3 views
0

This HTML input入力の値が "1"の場合、パターン自体が赤で、一致しません。なぜこの単純な正規表現はhtml5入力パターン属性以外のどこでも動作しますか?

var inp = document .createElement ('input'); 
inp .pattern = '^\d+\.?\d*$'; 
document .getElementById ("foo") .appendChild (inp); 

正規表現/^\d+\.?\d*$/マッチ "1" は、私は他の場所でそれをテストします。それもそうであるように見える。

なぜフォーム要素が一致しないのですか? (Firefox)

+0

バックスラッシュは文字列リテラルにエスケープする必要があります。 – Bergi

答えて

2

息子の文字列表現。

文字列リテラルを使用しているという点で、pattern属性の使用法は正しいです。 MDN

正規表現の言語はJavaScriptのものと同じです。 パターンはスラッシュで囲まれていません。

ただし、文字列リテラルにあなたはスラッシュは文字列リテラルの意味で、独自のリルの解釈を取得する前に\をエスケープする必要があります。エスケープすると実際のスラッシュとして表示され、の場合はのパターン全体がRegExpエンジンによって特殊文字として認識されます。ないHTML属性またはしかし、正規表現リテラルに -

var inp = document.createElement('input'); 
inp.pattern = '^\\d+\\.?\\d*$'; 
document.getElementById("foo").appendChild(inp); 

https://jsfiddle.net/qatt3rwt/4/

+0

@Christoph:私は最初の改訂が好きでした:-) – Bergi

+0

面白い - はい、教育 - meh ... – Christoph

+0

@Christoph、Bergiうまくいけば、両方とも幸せです。 :)(私はあなたがChristophの答えを編集したときに私はまだ編集中でした。私は最初にコードを与えてから説明を追加するよう教えてくれると思います。) –

関連する問題