Skip to content

Commit 3cfadcc

Browse files
Validator: Update CompareRule (DevExpress#7834)
1 parent b0852a0 commit 3cfadcc

File tree

1 file changed

+132
-3
lines changed
  • api-reference/10 UI Components/dxValidator/8 Validation Rules/CompareRule

1 file changed

+132
-3
lines changed

api-reference/10 UI Components/dxValidator/8 Validation Rules/CompareRule/CompareRule.md

Lines changed: 132 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,143 @@ generateTypeLink:
77
---
88
---
99
##### shortDescription
10-
A validation rule that demands that a validated editor has a value that is equal to a specified expression.
10+
A validation rule that requires validated values to match a specified expression.
11+
12+
---
13+
To specify a comparison expression, define the [comparisonTarget](/api-reference/10%20UI%20Components/dxValidator/8%20Validation%20Rules/CompareRule/comparisonTarget.md '/Documentation/ApiReference/UI_Components/dxValidator/Validation_Rules/CompareRule/#comparisonTarget') function. Validator compares values to this function's return value. To configure which comparison operator Validator compares values to, specify the [comparisonType](/api-reference/10%20UI%20Components/dxValidator/8%20Validation%20Rules/CompareRule/comparisonType.md '/Documentation/ApiReference/UI_Components/dxValidator/Validation_Rules/CompareRule/#comparisonType') property.
14+
15+
---
16+
17+
##### jQuery
18+
19+
<!-- tab: index.js -->
20+
$(function() {
21+
$('#password').dxTextBox({ ... });
22+
$('#confirm-password').dxTextBox({ ... })
23+
.dxValidator({
24+
type: 'compare',
25+
comparisonTarget() {
26+
const passwordTextBox = $('#password').dxTextBox('instance');
27+
if (passwordTextBox) {
28+
return passwordTextBox.option('value');
29+
}
30+
return null;
31+
},
32+
message: 'Passwords do not match.',
33+
});
34+
});
35+
36+
##### Angular
37+
38+
<!-- tab: app.component.html -->
39+
<dx-text-box
40+
[(value)]="password"
41+
></dx-text-box>
42+
<dx-text-box>
43+
<dx-validator>
44+
<dxi-validation-rule
45+
type="compare"
46+
[comparisonTarget]="passwordComparison"
47+
message="Passwords do not match."
48+
></dxi-validation-rule>
49+
</dx-validator>
50+
</dx-text-box>
51+
52+
<!-- tab: app.component.ts -->
53+
export class AppComponent {
54+
password = '';
55+
passwordComparison = () => this.password;
56+
}
57+
58+
<!-- tab: app.module.ts -->
59+
import { BrowserModule } from '@angular/platform-browser';
60+
import { NgModule } from '@angular/core';
61+
import { AppComponent } from './app.component';
62+
63+
import { DxValidatorModule, DxTextBoxModule } from 'devextreme-angular';
64+
65+
@NgModule({
66+
declarations: [
67+
AppComponent
68+
],
69+
imports: [
70+
DxTextBoxModule,
71+
BrowserModule,
72+
DxValidatorModule
73+
],
74+
providers: [],
75+
bootstrap: [AppComponent]
76+
})
77+
export class AppModule { }
78+
79+
##### Vue
80+
81+
<!-- tab: App.vue -->
82+
<script setup lang="ts">
83+
import { ref } from 'vue';
84+
import { DxTextBox } from 'devextreme-vue/text-box';
85+
import { DxValidator, DxCompareRule } from 'devextreme-vue/validator';
86+
87+
const password = ref('');
88+
89+
function passwordComparison() {
90+
return password.value;
91+
}
92+
93+
</script>
94+
95+
<template>
96+
<DxTextBox
97+
v-model:value="password"
98+
/>
99+
<DxTextBox>
100+
<DxValidator>
101+
<DxCompareRule
102+
:comparison-target="passwordComparison"
103+
message="Passwords do not match."
104+
/>
105+
</DxValidator>
106+
</DxTextBox>
107+
</template>
108+
109+
##### React
110+
111+
<!-- tab: App.tsx -->
112+
import React, { useCallback, useMemo, useRef, useState } from 'react';
113+
import { TextBox, type TextBoxTypes } from 'devextreme-react/text-box';
114+
import { Validator, CompareRule } from 'devextreme-react/validator';
115+
116+
const [password, setPassword] = useState('');
117+
const passwordComparison = useCallback(() => password, [password]);
118+
119+
const onPasswordChanged = useCallback((e: TextBoxTypes.ValueChangeEvent) => {
120+
setPassword(e.value);
121+
}, [setPassword])
122+
123+
function App() {
124+
return (
125+
<React.Fragment>
126+
<TextBox
127+
value={password}
128+
onValueChanged={onPasswordChanged}
129+
/>
130+
<TextBox>
131+
<Validator>
132+
<CompareRule
133+
message="Passwords do not match."
134+
comparisonTarget={passwordComparison}
135+
/>
136+
</Validator>
137+
</TextBox>
138+
</React.Fragment>
139+
);
140+
}
11141

12142
---
13-
To specify the expression that the validated field must match, set the rule's [comparisonTarget](/api-reference/10%20UI%20Components/dxValidator/8%20Validation%20Rules/CompareRule/comparisonTarget.md '/Documentation/ApiReference/UI_Components/dxValidator/Validation_Rules/CompareRule/#comparisonTarget') configuration property. Assign a function to this property. The validated value will be compared to the function's return value. The comparison will be performed by using the operator that is set for the [comparisonType](/api-reference/10%20UI%20Components/dxValidator/8%20Validation%20Rules/CompareRule/comparisonType.md '/Documentation/ApiReference/UI_Components/dxValidator/Validation_Rules/CompareRule/#comparisonType') property.
14143

15144
#include btn-open-demo with {
16145
href: "https://js.devexpress.com/Demos/WidgetsGallery/Demo/Validation/Overview/"
17146
}
18147

19148
#####See Also#####
20-
- [Data Validation](/concepts/05%20UI%20Components/zz%20Common/05%20UI%20Widgets/20%20Data%20Validation '/Documentation/Guide/UI_Components/Common/UI_Widgets/Data_Validation/')
149+
- [Data Validation](/concepts/05%20UI%20Components/zz%20Common/05%20UI%20Widgets/20%20Data%20Validation '/Documentation/Guide/UI_Components/Common/UI_Widgets/Data_Validation/')

0 commit comments

Comments
 (0)