16

一致する文字列の終わりの始まりを示す^(サーカムフレックス)文字と$(通貨またはドル)文字を含まない例をほとんど見ました。しかし、html5仕様ではこれに関して何も見つかりませんでした。それらはパターンに暗黙的に含まれていますか?html5仕様では、それらは暗黙的であると述べられています。

コンパイルされたパターンの正規表現は、文字列と照合する場合、その開始を文字列の先頭に固定し、その終了を文字列の末尾に固定する必要があります。これは、この属性に使用される正規表現言語がJavaScriptで使用されるものと同じであることを意味しますが、パターン属性がサブセットだけでなく値全体と照合される点が異なります(最初に^(?:を意味するかのように)パターンの)と最後の)$)。

type = "text"入力では、パターンはどちらの形式でも正常に機能しますが、type = "tel"入力では、正規表現が期待どおりに機能するように文字を削除する必要がありました。OperaとFirefoxの両方でテストしました。

これはブラウザのバグですか?bugzillaなどでバグを報告する必要がありますか?


編集:縮小されたテストケースを作成できないため、奇妙なバグに遭遇したようです。ページへの単純な入力では、上記の動作は示されません。ただし、問題は残ります。私はすべきですか、それともダーン^と$アンカーを使用すべきではありませんか?

4

3 に答える 3

1

標準によれば、正規表現は開始と終了に固定されています。ただし、実際には(FF15とChrome21でテスト済み)、最初にのみ固定されます。

したがって、標準と現実の両方と互換性を持たせたい場合は、正規表現を$明示的に固定する必要があります。使用するかどうか^もあなた次第です-それは必要ではありません。

于 2012-09-25T14:17:08.093 に答える
-2

もちろん、電話番号にはさまざまな形式がありますが、

例えば

  • オーストリアのウィーンにいる間は、「4000」をダイヤルすると市庁舎につながります。
  • オーストリアのインスブルックにいる間、ウィーン市庁舎にダイヤルするには「014000」をダイヤルする必要があります
  • 米国ニューヨークにいる間は、同じ番号をダイヤルするには +4314000 をダイヤルする必要があります。

これには歴史的な理由があり、古い機械システムでは、1 つのデバイスから次のデバイスにコールを接続するジョブを数字ごとに委任していました (これは、内線番号が番号の先頭ではなく末尾にある理由でもあります。 DNS では、ドメイン名を先頭で拡張できますが、最後では拡張できません)

^両方のアンカーを持つ正規表現は$、電話番号がまったく同じ形式で指定された場合にのみ一致します。アンカーのみを使用する$と、別の内線番号が指定されていない限り、同じ電話番号に確実に一致します。アンカーはありません。つまり、ロケーション コードや拡張子に関係なくドロップ^して一致しますが、信頼性が低下します。$

ウィーン市庁舎のパターンとして「4000」を使用すると、「4000」、「014000」、「+4314000」に一致しますが、ドイツの銀行である「+44140001」にも一致します。

于 2012-02-04T16:24:01.543 に答える