1

javascript を使用して html5 パターン属性を複製しようとしていますが、一貫性のない結果が得られます。

パターンは[a-zA-Z\. \']+

Chrome では、「asd 123」と入力してもテストに合格しません。

のようなものを使用して

el.value.match(new RegExp(el.pattern))

「asd 123」を通過させます。これは明らかに「asd」が一致するためです。

^パターンの最初と最後にandを追加することでこの特定の問題を解決できます$が、問題はこれです-パターン属性とまったく同じように実装されている関数がそこにありますか? 私が期待すべき他の驚きはありますか?

4

3 に答える 3

3

追加^して、$多かれ少なかれpattern属性として正確に実装しています。patternHTML 5の w3c 仕様の最新バージョン( http://www.w3.org/html/wg/drafts/html/master/forms.html#the-pattern-attribute ) によると:

これは、この属性に使用される正規表現言語が JavaScript で使用されるものと同じであることを意味しますが、pattern 属性が値のサブセットだけでなく、値全体に対して照合される点が異なります (開始時に ^(?: を暗示しているかのように)。パターンの最後に )$ ) .

(強調追加)

于 2013-04-03T19:55:43.233 に答える
2

そのような関数の本質は、おそらく次のようなものになるでしょう

function validate( el ) {
  // Check hasAttribute to avoid a regex like ^(?:null)$
  return el.value && el.hasAttribute( 'pattern' ) 
    ? new RegExp( '^(?:' + el.getAttribute( 'pattern' ) + ')$' ).test( el.value )
    : null
}

(hasAttribute のため IE 8+)

requiredただし、適切な検証の実装では、属性の存在などの他の要因も考慮する必要があります。詳細については、データ フォームの検証と、HTML5フォームの後方互換性を確保するなどの HTML5 フォーム シムを参照してください。

于 2013-04-03T20:05:31.733 に答える