2017-06-27 9 views
-2

ため「@」を過ぎて、私の[正しい]正規表現を承認しない:HTML5パターン正規表現は、これは、jQueryの検証ライブラリでは動作しない私の正規表現のコードで電子メールの検証

return /^(("[\w-\s]+")|([\s\w\+-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{1,66})\.([a-z]{2,6}\s*(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?)$/i

にそれを追加しますjQueryのバリデータのない他のHTML5のページには、エラーの結果:

Pattern attribute value /^(("[\w-\s]+")|([\s\w+-]+(?:.[\w-]+))|("[\w-\s]+")([\w-]+(?:.[\w-]+)))(@((?:[\w-]+.)\w[\w-]{1,66}).([a-z]{2,6}\s(?:.[a-z]{2})?)$)|(@[?((25[0-5].|2[0-4][0-9].|1[0-9]{2}.|[0-9]{1,2}.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2}).){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})]?)$/i is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: //^(("[\w-\s]+")|([\s\w+-]+(?:.[\w-]+))|("[\w-\s]+")([\w-]+(?:.[\w-]+)))(@((?:[\w-]+.)\w[\w-]{1,66}).([a-z]{2,6}\s(?:.[a-z]{2})?)$)|(@[?((25[0-5].|2[0-4][0-9].|1[0-9]{2}.|[0-9]{1,2}.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2}).){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})]?)$/i/: Invalid character class

は許可しない:

  • AA

  • ジャガイモ

許可@:

これはHTMLコードです:

<input type="email" id="email" name="email" placeholder="" required="true" class="input-xlarge" pattern='/^(("[\w-\s]+")|([\s\w\+-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{1,66})\.([a-z]{2,6}\s*(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?)$/i'> 
+1

すでに入力の種類を「電子メール」として指定しました。正規表現を渡す必要はありません(考慮されません)。あるいは、 'type =" text "'を使用してください。 –

+1

問題のマニュアルバイナリ検索をお勧めします。正規表現の半分を削除し、エラーが続くかどうか確認してください。今半分が問題を抱えていることが分かります。あなたがそれを見つけるまで続ける。 – smarx

+1

また、このような正規表現を使用して電子メールアドレスを検証しようとするのは、本当に悪い考えです。私は便利なリンクを持っていませんが、それはたくさん議論されています。 – smarx

答えて

1

無効な文字クラスは[\w-\s]です。この範囲は意味をなさない。私はあなたが[\w\s-](範囲ではない)を意味すると思います。その変更により、/^$/iを式の周りに落とし、type="text"というパターンが実際に適用されるように、物事は「うまくいく」ようです。しかし、再度、電子メールアドレスを検証するために正規表現を使用しないでください。下のコメント欄での議論パー

<form> 
 
<input type="text" id="email" name="email" placeholder="" required="true" class="input-xlarge" pattern='(("[\w\s-]+")|([\s\w\+-]+(?:\.[\w-]+)*)|("[\w\s-]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{1,66})\.([a-zA-Z]{2,6}\s*(?:\.[a-zA-Z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?)'> 
 
<input type="submit"> 
 
</form>

EDIT

、多分[\w-\s]は範囲であることを意味しので、(エラーを取り除くことが)私の編集おそらく、元のパターンのJavaScript解釈と意味的に同じではありません。

+0

'/ [\ w- \ s] /'はJS正規表現の正しいパターンです。 '/ [\ w- \ s]/u'はそうではありません。 –

+0

@WiktorStribiżew申し訳ありませんが、/ /はどこですか? – smarx

+0

ES6では、HTML5の 'pattern'はデフォルトで'/u'修飾子を付けてコンパイルされます。 –

関連する問題