This content has been machine translated dynamically.
Dieser Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde. (Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique. (Clause de non responsabilité)
Este artículo lo ha traducido una máquina de forma dinámica. (Aviso legal)
此内容已经过机器动态翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
이 콘텐츠는 동적으로 기계 번역되었습니다. 책임 부인
Este texto foi traduzido automaticamente. (Aviso legal)
Questo contenuto è stato tradotto dinamicamente con traduzione automatica.(Esclusione di responsabilità))
This article has been machine translated.
Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)
Ce article a été traduit automatiquement. (Clause de non responsabilité)
Este artículo ha sido traducido automáticamente. (Aviso legal)
この記事は機械翻訳されています.免責事項
이 기사는 기계 번역되었습니다.책임 부인
Este artigo foi traduzido automaticamente.(Aviso legal)
这篇文章已经过机器翻译.放弃
Questo articolo è stato tradotto automaticamente.(Esclusione di responsabilità))
Translation failed!
複合高度なポリシー式
高度なポリシー式は、ブール演算子または算術演算子とアトミック演算で構成できます。次の複合式には、ブール値 AND があります。
http.req.hostname.eq("mycompany.com") && http.req.method.eq(post)
次の式は、2 つのターゲットの値を加算し、その結果を 3 番目の値と比較します。
http.req.url.length + http.req.cookie.length \<= 500
複合式には、任意の数の論理演算子と算術演算子を使用できます。
次の式は、HTTP リクエストの長さを評価します。この式は URL と Cookie に基づいています。 この式は、ヘッダー内のテキストを評価します。また、この 2 つの結果に対してブール値 AND も表示されます。
http.req.url.length + http.req.cookie.length \<= 500 && http.req.header.contains("some text")
括弧を使用して、複合式での評価の順序を制御できます。
複合式のブール演算子
複合式は、次の演算子を使用して構成します。
-
&&.
この演算子は論理 AND です。式を TRUE と評価するには、すべてのコンポーネントが TRUE と評価される必要があります。
例:
http.req.url.hostname.eq(“myHost”) && http.req.header(“myHeader”).exists
-
||.
この演算子は論理 OR です。式のいずれかのコンポーネントが TRUE と評価された場合、式全体が TRUE になります。
-
!.
P 式に論理 NOT を指定します。
Citrix ADC構成ユーティリティでは、[ 式の追加 ]ダイアログボックスにAND、NOT、OR演算子が表示されることがあります。ただし、これらの複合式は限定的に使用できます。演算子&&、||、!を使用することをお勧めしますブール論理を使用する複合式を構成するには。
複合式の括弧
括弧を使用して、式の評価順序を制御できます。以下はその例です:
http.req.url.contains("myCompany.com") || (http.req.url.hostname.eq("myHost") && http.req.header("myHeader").exists)
次に、別の例を示します。
(http.req.header("Content-Type").exists && http.req.header("Content-Type").eq("text/html")) || (http.req.header("Transfer-Encoding").exists || http.req.header("Content-Length").exists)
文字列の複合演算
次の表に、文字列データに対する複合演算を設定するために使用できる演算子を示します。
文字列値を生成する操作 | 説明 |
---|---|
str + str | 演算子の左側の式の値と右側の値を連結します。例:http.req.hostname + http.req.url.protocol |
str + num | 演算子の左側にある式の値と、右側の数値を連結します。例:http.req.hostname + http.req.url.content_length |
num + str | 演算子の左側にある式の数値を、右側の文字列値と連結します。例:http.req.url.content_length + http.req.url.hostname |
str + ip | 演算子の左側にある式の文字列値を、右側の IP アドレス値と連結します。例:http.req.hostname + 10.00.000.00 |
IP + str | 演算子の左側にある式の IP アドレス値と右側の文字列値を連結します。例:client.ip.dst + http.req.url.hostname |
str1 ALT str2 | string1 の評価によって undef 例外が発生するか、結果がヌル文字列である場合は string2 を使用します。それ以外の場合は string1 を使用し、string2 は決して評価しません。例:http.req.hostname alt client.ip.src |
TRUE または FALSE の結果を生成する文字列に対する演算 | 説明 |
---|---|
str == str | 演算子の両側の文字列が同じかどうかを評価します。以下は例です:http.req.ヘッダー(「マイヘッダー」)== http.res.ヘッダー(「マイヘッダー」) |
str <= str | 演算子の左側の文字列が、右側の文字列と同じか、アルファベット順に先行するかを評価します。 |
str >= str | 演算子の左側の文字列が右側の文字列と同じか、アルファベット順に続くかを評価します。 |
str < str | 演算子の左側の文字列が、右側の文字列の前にアルファベット順にあるかどうかを評価します。 |
str > str | 演算子の左側の文字列が、右側の文字列の後にあるかどうかをアルファベット順に評価します。 |
str !!= str | 演算子の両側の文字列が異なるかどうかを評価します。 |
文字列に対する論理演算 | 説明 |
---|---|
bool && bool | この演算子は論理 AND です。複合式のコンポーネントを評価する場合、AND によって結合されるすべてのコンポーネントが TRUE と評価される必要があります。以下は例を示しています。(「ビューレポート & & 私のページラベルを表示」) |
bool || bool | この演算子は論理 OR です。複合式のコンポーネントを評価するときに、OR に属する式のいずれかのコンポーネントが TRUE と評価されると、式全体が TRUE になります。以下は、例です。http.req.url.contains (「.js」) || http.res.header。(「コンテンツタイプ」)。(「javascript」) を含む |
bool | 式に対して論理 NOT を実行します。 |
数値の複合演算
複合数値式を設定できます。たとえば、次の式は、HTTP ヘッダーの長さと URL の長さの合計を表す数値を返します。
http.req.header.length + http.req.url.length
次の表では、数値データの複合式を構成するために使用できる演算子について説明します。
数値の算術演算 | 説明 |
---|---|
num + num | 演算子の左式の値を右側の式値に追加します。例:http.req.content_length + http.req.url.length |
num – num | 左の数式値から演算子の右側の式値を減算します。 |
数×数値 | 演算子の左の式の値に右の式の値を乗算します。例:クライアント.interface.rxスループット * 9 |
num / num | 演算子の左式の値を右の式の値で割ります。 |
num % num | モジュロ、または演算子の左側の式の値を、右側の式の値で除算した剰余を計算します。たとえば、「15 mod 4」の値は 3、「12 mod 4」の値は 0 になります。 |
~number | 数値のビット単位の論理否定を適用した後の数値を返します。次の例では、数値式が 12 (バイナリ 1100) を返すと仮定しています:~数値式です。〜演算子を適用した結果は、-11(バイナリ1110011、合計32ビット、すべてが左側)です。32 ビット未満のすべての戻り値は、演算子を適用する前に暗黙的に左側にゼロを持ち、32 ビット幅にします。 |
number ^ number | 等しい長さの2つのビットパターンを比較し、各数値引数の対応するビットの各ペアに対してXOR演算を実行し、ビットが異なる場合は1を返し、同じ場合は0を返します。整数引数と現在の数値にビット単位のXORを適用した後の数値を返します。ビット単位の比較の値が同じ場合、戻り値は 0 になります。次の例では、数値.式 1 は 12 (バイナリ 1100) を返し、数値.式 2 は 10 (バイナリ 1010) を返します。数値.式1 ^ 数値.式2 ^ 演算子を式全体に適用した結果は 6 (バイナリ 0110) です。32 ビット未満のすべての戻り値は、演算子を適用する前に暗黙的に左側にゼロを持ち、32 ビット幅にします。 |
数値| 数値 | 数値値にビット単位の OR を適用した後の数値を返します。ビット単位の比較のいずれかの値が 1 の場合、戻り値は 1 になります。次の例では、数値.式 1 が 12 (バイナリ 1100) を返し、数値.式 2 が 10 (バイナリ 1010) を返すと仮定しています。数値.式1 | 数値.式2 | 演算子を式全体に適用した結果は 14 (バイナリ 1110) です。32 ビット未満のすべての戻り値は、演算子を適用する前に暗黙的に左側にゼロを持ち、32 ビット幅にします。 |
number & number | 同じ長さの 2 つのビットパターンを比較し、対応するビットの各ペアに対してビット単位の AND 演算を実行します。両方のビットに値 1 が含まれている場合は 1、いずれかのビットが 0 の場合は 0 を返します。次の例では、数値.式1 が 12 (バイナリ 1100) を返し、数値.式2 は 10 (バイナリ 1010) を返すと仮定しています。数値.式1 と数値.式2 式全体が 8 (バイナリ 1000) と評価されます。32 ビット未満のすべての戻り値は、演算子を適用する前に暗黙的に左側にゼロを持ち、32 ビット幅にします。 |
num « num | 右側の number 引数のビット数によって、数値値のビット単位の左シフトの後に数値を返します。シフトされるビット数は 32 の整数です。次の例では、numeric.expression1 は 12 (バイナリ 1100) を返し、numeric.expression2 が 3 を返すと仮定しています。数式1 « 数値.式2 LSHIFT 演算子を適用した結果は 96 (バイナリ 110000) です。32 ビット未満のすべての戻り値は、演算子を適用する前に暗黙的に左側にゼロを持ち、32 ビット幅にします。 |
num » num | 整数引数のビット数による数値値のビット単位の右シフト後の数値を返します。シフトされるビット数は 32 の整数です。次の例では、数値.式1 が 12 (バイナリ 1100) を返し、数値.式2 が 3 を返すと仮定しています。数値.式1 » 数値.式2 RSHIFT 演算子を適用した結果は 1 (バイナリ 0001) です。32 ビット未満のすべての戻り値は、演算子を適用する前に暗黙的に左側にゼロを持ち、32 ビット幅にします。 |
TRUE または FALSE の結果を生成する数値演算子 | 説明 | |
---|---|---|
num == num | 演算子の左側の式の値が、右側の式の値と等しいかどうかを判断します。 | |
num!= num | 演算子の左側の式の値が右側の式の値と等しくないかどうかを判定します。 | |
num > num | 演算子の左側の式の値が右側の式の値より大きいかどうかを判定する。 | |
num < num | 演算子の左側の式の値が右側の式の値より小さいかどうかを判定する。 | |
num >= num | 演算子の左側の式の値が右側の式の値以上であるかどうかを判定する。 | |
num <= num | 演算子の左側の式の値が右側の式の値以下かどうかを判定する |
ポリシーインフラストラクチャのデータ型の関数
Citrix ADCポリシーインフラストラクチャでは、次の数値データ型がサポートされています。
- 整数 (32 ビット)
- 符号なしロング (64 ビット)
- ダブル (64 ビット)
単純な式は、これらのすべてのデータ型を返すことができます。また、算術演算子と論理演算子を使用してこれらのデータ型の値を評価または返す複合式を作成することもできます。また、ポリシー式では、これらの値をすべて使用できます。符号なし long 型のリテラル定数は、文字列 ul を数値に追加することで指定できます。double 型のリテラル定数には、ピリオド (.)、指数、またはその両方が含まれます。
算術演算子、論理演算子、および型昇格
複合式では、次の標準的な算術演算子と論理演算子を double データ型と符号なしロングデータ型に使用できます。
- +、-、*、/
- %, ~, ^, &, |, «, and » (do not apply to double)
- ==、!=、>、<、>=、<=
これらの演算子はすべて、Cプログラミング言語と同じ意味を持ちます。
整数型、符号なし long、および double 型のオペランド間の混合演算のすべての場合において。型昇格は、同じ型のオペランドに対して操作を行うために行われます。この演算では、優先順位の高いオペランドに下位優先タイプが昇格されます。優先順位の順序(高い順)は次のとおりです。
- Double
- 符号なしロング
- 整数
したがって、数値の結果を返す操作は、操作に含まれる最も高いタイプの結果を返します。
たとえば、オペランドが整数型で符号なし長型の場合、整数オペランドは自動的に符号なし長型に変換されます。この型変換は、単純な式で行われます。式の接頭辞によって識別されるデータの型が、関数に引数として渡されるデータの型と一致しません。HTTP.REQ.CONTENT_LENGTH.DIV (3ul) のオペレーションでは、接頭辞 HTTP.REQ.CONTENT_LENGTH は、符号なしロングになる整数を返します。符号なし長整数型:DIV () 関数の引数として渡されるデータ型で、符号なし長除算が実行されます。同様に、引数は式で昇格することができます。たとえば、HTTP.REQ.HEADER (「myHeader」) .TYPECAST_DOUBLE_AT.DIV (5) は整数 5 を倍精度型に昇格させ、倍精度除算を行います。
ある型のデータを別の型のデータにキャストする式については、 データの型キャストを参照してください。
共有
共有
この記事の概要
This Preview product documentation is Cloud Software Group Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Cloud Software Group Beta/Tech Preview Agreement.
The development, release and timing of any features or functionality described in the Preview documentation remains at our sole discretion and are subject to change without notice or consultation.
The documentation is for informational purposes only and is not a commitment, promise or legal obligation to deliver any material, code or functionality and should not be relied upon in making Cloud Software Group product purchase decisions.
If you do not agree, select I DO NOT AGREE to exit.