ユーザーがこれらの文字列を入力しないようにしたい:\*
または\|
または \^
または\~
.
ASP.Net ページでこれに使用する正規表現は何ですか? また、ASP.Net 正規表現バリデーターは、クライアント側の正規表現を使用してサーバー側で自動的に検証しますか、それともサーバー側の検証コードを記述する必要がありますか?
***
許可された
^|*~
許可された
\**
禁止されている
\^\|*\~
禁止されている
ユーザーがこれらの文字列を入力しないようにしたい:\*
または\|
または \^
または\~
.
ASP.Net ページでこれに使用する正規表現は何ですか? また、ASP.Net 正規表現バリデーターは、クライアント側の正規表現を使用してサーバー側で自動的に検証しますか、それともサーバー側の検証コードを記述する必要がありますか?
***
許可された
^|*~
許可された
\**
禁止されている
\^\|*\~
禁止されている
正規表現のエスケープは、既に入力したものです: \
( \*
、\|
、など)。これを使う限り。クライアント側でこれを行う場合は、javascript/jquery を使用します。
通常、正規表現は、サブジェクトが一致するパターンを定義するために使用されます。あなたが求めているのは、サブジェクトが一致してはならないパターンを定義することです。逆一致は正規表現の組み込み機能ではありませんが、否定的なルックアラウンドを使用してこの動作を模倣することができます。
次の式は、否定先読み (?!...)
を使用して、必要なものに一致させます。
^((?!(\\\*)|(\\\|)|(\\\^)|(\\\~)).)*$
This SO answerは、否定的な先読みが逆正規表現一致の動作をどのように達成するかについての優れた説明を提供します。
これは、バックスラッシュ文字をエスケープする方法についての質問にも答えていると思います。私が上で行ったように、あなたはただ二重に逃げるだけです。
Asp.Net WebForms でのクライアント + サーバー側の検証について
に設定しRegularExpressionValidator
ている限り、コントロールはサーバー側とクライアント側の両方の検証を行います。これにより、がフォーカスを失ったとき (クライアント側) またはページがポストバックされたとき (サーバー側) にエラー メッセージが表示されます。EnableClientScript
true
ControlToValidate
正規表現バリデーターは、クライアント側でコンテンツを検証しています。クライアント側とサーバー側で検証できるカスタムバリデーターを使用できます。
カスタムバリデータのサンプル:
//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;
}
}
ちなみに、クライアントとサーバーの両方の検証を実装する場合は注意してください。詳細については、この質問をお読みください:フォーム検証のクライアント側とサーバー側