2011-09-13 30 views
7

正規表現を使用してフォームを検証しようとしています(http://regexlib.com/)。私がしようとしているのは、z、カンマ、アポストロフィを除くすべての文字を除外することです。このコードを使用する場合:正規表現でアポストロフィをエスケープしますか?

<cfinput name="FirstName" type="text" class="fieldwidth" maxlength="90" required="yes" validateat="onsubmit,onserver" message="Please ensure you give your First Name and it does not contain any special characters except hyphens or apostrophes." validate="regular_expression" pattern="^([a-zA-Z'-]+)$" /> 

次のエラーが表示されます。私はこのコードを使用している場合、それは動作しますので、これはアポストロフィに関連考え出した(しかし、アポストロフィを許可していません):

<cfinput name="FirstName" type="text" class="fieldwidth" maxlength="90" required="yes" validateat="onsubmit,onserver" message="Please ensure you give your First Name and it does not contain any special characters except hyphens or apostrophes." validate="regular_expression" pattern="^([a-zA-Z-]+)$" /> 

だから私は思ったんだけど、正規表現を使用する際にアポストロフィをエスケープするためにいくつかの特別な方法がありますか?

EDIT

私は問題は(ザナトスのおかげで)引き起こされている場合、私が見つけたと思いますが、それを修正する方法がわかりません。基本的にCFは、次のようにフィールドを検証するために隠しフィールドを生成している:

<input type='hidden' name='FirstName_CFFORMREGEX' value='^([a-zA-Z'-]+)$'> 

それは価値の周りに単一のアポストロフィではなく、音声マークを使用しているので、それは価値の終わりとしてアポストロフィを解釈しています。

+0

(それは単一引用符のためのコードです)\x27で見積もりを交換してみてください

new Regex('^([a-zA-Z'-]+)$') 

アポストロフィは、「特殊文字であるとして付けることによって、標準のテキストから脱出する必要があります\ '、try pattern = "^([a-zA-Z \' - ] +)$" HTH – John

+1

@John本当ですか?それはどういう意味ですか?どのようにそれは正規表現の "言語"で使用されていますか? – xanatos

+0

私は 'try'と言っていますので、正規表現には多くの味があり、タグ付き式を置き換えることはWord 2002のプログラムにはありません。 – John

答えて

7

私はcfinputの実装にバグがあると思います。おそらく、Javascriptの正規表現でパターンに渡す文字列を使用しますが、'を使用してその文字列を引用します。だから、それを変換します

+0

そのxanatoのおかげで、残念ながらそれはどちらも動作しません。 Javascriptの検証は、実際に私のオリジナルでうまく動作しますが、問題があるのはサーバー側の検証です。それ以上のことがなければ、サーバ側で自分自身で検証するための何かを試してみてください。 – Kristian82

+0

@ Kristian82これを試してみましょう:-) – xanatos

+1

私のコメントは今、感謝しています。 – Kristian82

0

ハイフンは、周囲の2文字の間の範囲を意味するため、ハイフンが処理されるためです。ベストプラクティスとしてハイフンを先頭に付けます。

^([-a-zA-Z']+)$ 
+2

最後に置くことは同じ良いことですが、違いはありません。 – stema

関連する問題