2012-04-20 15 views
2

\*または\|または\^または\~のいずれかの文字列をユーザーが入力しないようにします。 *、 |、 ^、〜の正規表現バリデーター

ASP.Netページでこれに対してどのような正規表現を使用するのですか?また、ASP.Net正規表現バリデーターは、クライアント側の正規表現を使用してサーバー側で自動的に検証するか、サーバー側の検証を記述する必要がありますコード? \\*\|、など):

***が許さ

^|*~

\^\|*\~正規表現のエスケープはすでに置くものです

答えて

2

通常、正規表現は、主題が一致するパターンを定義するために使用されます。あなたが求めているのは、対象が一致してはならないパターンを定義することです。逆マッチングは、正規表現の組み込み機能ではありませんが、negative lookaroundを使用してこの動作を模倣することは可能です。

次の式はあなたが必要なものと一致する否定先読み(?!...)を使用しています。

^((?!(\\\*)|(\\\|)|(\\\^)|(\\\~)).)*$ 

This SO answerは否定先読みは逆正規表現マッチの動作を実現する方法についての優れた説明を提供します。

これはまた、バックスラッシュ文字をエスケープする方法についてのご質問にもお答えします。上記のように二重に逃げるだけです。クライアント+サーバー側の検証について

Asp.Net Webフォームで

RegularExpressionValidatorコントロールがあれば、あなたがtrueEnableClientScriptセットを持っているとして、あなたのための両方のサーバーとクライアント側の検証を行います。これにより、ControlToValidateのフォーカスが失われたとき(クライアント側)またはページがポストバックされたとき(サーバー側)にエラーメッセージが表示されます。

+0

私の状況では、バックスラッシュはエスケープ文字ではありません。実際には、バックスラッシュと文字を含む2文字を入力しないようにしています。 – Sunil

+0

@Sunil ahh、okだから、あなたは '***'と '^ | *〜'は許しますが '* \ **'や '\^\ | \ * \〜' "\ ^"など... – Robbie

+0

***許可、^ | *〜許可、* \\ ***許可されていない、\^\ | \ * \〜は許可されていません。 – Sunil

2

を許可されていない許可されていない

\**を可能にしました。これまではこれを使用していました。クライアント側でこれを実行したい場合は、javascript/jqueryを使用します。

+0

+1しかし、あなたは非常にカスタムまたは控えめなソリューションをしたい場合は、独自のjavascript/jqueryを書く必要があります。これは、 'EnableClientSide'がtrueに設定されているため、asp.netがクライアントコードをページに挿入するためです。 – Robbie

0

正規表現検証ツールがクライアント側のコンテンツを検証しています。カスタムバリデーターを使用すると、サーバー側だけでなくクライアント側でも検証できます。カスタムバリデータ用

サンプル:

//html: 
<asp:TextBox ID="textPreferredDate" runat="server"></asp:TextBox> 
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="textPreferredDate" Display="Dynamic" ErrorMessage="Format: m/d/yyyy" OnServerValidate="CustomValidator1_ServerValidate" ClientValidationFunction="validateDate">Invalid format (m/d/yyyy)</asp:CustomValidator><br /> 

//client side: 
<script language="javascript"> 
function validateDate(oSrc, args) 
{ 
    var iDay, iMonth, iYear; 
    var arrValues; 
    arrValues = args.Value.split("/"); 
    iMonth = arrValues[0]; 
    iDay = arrValues[1]; 
    iYear = arrValues[2]; 

    var testDate = new Date(iYear, iMonth - 1, iDay); 
    if ((testDate.getDate() != iDay) || 
     (testDate.getMonth() != iMonth - 1) || 
     (testDate.getFullYear() != iYear)) 
    { 
     args.IsValid = false; 
     return; 
    } 

    return true; 
} </script> 

//server side: 
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    try 
    { 
     DateTime.ParseExact(args.Value, "d", null); 
     args.IsValid = true; 
    } 
    catch 
    { 
     args.IsValid = false; 
    } 
} 

ところであなたはクライアントとサーバーの両方の検証を実装する場合に注意してください。詳細については、この質問をお読みください。Form validation client side and server side

+0

標準のバリデータは、 "ページ"を呼び出すと仮定すると、クライアント側とサーバー側の両方で検証されます。あなたのコードビハインドにある "IsValid"をチェックしてください –