转 自己的validator类

本文介绍如何在AS3中创建自定义验证器类personValidator,以实现对特定输入的有效性检查。通过重写Validator基类的doValidation方法,根据实际需求定制验证规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

AS3虽然自带很多种类的validator,但是对于我们来说功能还是太少了.所以这时候不可避免就是要重写这个类,写出适合自己的validator类。

首先,假设有一个textinput,id名为userInput;一个button,id名为submit_Btn。例如以下代码:

<mx:TextInput id="selUser" width="100%"/>
<mx:Button id="bt_submit" />

新建一个floder,用于存放即将新建的class,新建一个personValidator的AS3 class文件

public class personValidator extends Validator
 
{
  
private var results:Array;
  
//构造方法继承父类
  public function personValidator()
  
{
   
super();  
  }

  
//重写doValidation方法,在其内可以写入自己想要的规则,很明显这里是根据select再判断具体person的情况
  override protected function doValidation(value:Object):Array
  
{
   var person:String 
= String(value.person);
   var select : Boolean 
= Boolean(value.select);
   
   
//clear the array
   results = ;
   
//首先做一下父类的方法
   results = super.doValidation(value);
   
if(results.length>0)
   
{
    
return results;
   }

   
//这里开始就是你自己的方法了
   if(select)
   
{
    
if(person == "" || person == null)
    
{
     results.push(
new ValidationResult(true"person""noPersonName"
                         
"輸入框内不能為空."));
                 
return results;
    }

   }

   
return results;
  }

 }


保存后,到前台页面文件中,添加此类,如:

<mx:Model id="selectUserXml">
  
<types>
   
<type>
    
<person>{selUser.text}</person>
    
<select>{toParameter.selected}</select>
   
</type>
  
</types>
 
</mx:Model>


 
<model:personValidator id="perVal" source="{selectUserXml}" property="type"
  trigger
="{bt_submit}" triggerEvent="click" listener="{selUser}"
  valid
="setNextOwnerResult()"/>

source:绑定的数据源,property:数据源中的节点名称,trigger:触发此validator的组件,triggerEvent:组件的事件,listener:此validator所监视的组件,valid:验证通过后执行的方法。

上面建立的model为一个保存数据的XML最后传入validator的value,当然你可以采取其他方式来保存。

### 使用 `field_validator` 验证 Python 枚举 为了确保表单字段中的值属于特定的枚举型,可以利用 Pydantic 的 `field_validator` 装饰器来实现自定义验证逻辑。下面是一个完整的例子,展示了如何结合使用 Pydantic 和 Python 的内置 `enum` 模块来进行字段验证。 #### 安装依赖库 首先,确保安装了必要的包: ```bash pip install pydantic ``` #### 创建枚举和模型 通过定义一个继承自 `Enum` 的作为枚举型,并将其用于 Pydantic 模型中相应的字段声明。接着,在该字段上应用 `@field_validator` 来执行额外的验证操作。 ```python from enum import Enum from typing import Optional from pydantic import BaseModel, Field, ValidationError, field_validator class Color(Enum): RED = "red" GREEN = "green" BLUE = "blue" class Item(BaseModel): color: Color @field_validator('color') def check_color(cls, v): if not isinstance(v, Color): raise ValueError(f"{v} is not a valid color value.") return v try: item = Item(color="yellow") except ValidationError as e: print(e) item_blue = Item(color=Color.BLUE) print(item_blue.color.value) # 输出 blue ``` 在这个例子中,当传入的颜色不是预定义的枚举成员时,会触发异常并给出提示信息;如果提供了有效的颜色,则正常工作[^1]。 对于更复杂的场景,比如需要支持字符串形式的输入(即允许用户直接提供 `"red"` 这样的字符串),可以在验证函数内部增加换逻辑,使得即使用户提供的是字符串也能被正确解析成对应的枚举实例。 ```python @field_validator('color') def parse_and_check_color(cls, v): try: if isinstance(v, str): v = Color[v.upper()] elif not isinstance(v, Color): raise ValueError() except (KeyError, ValueError): raise ValueError(f"'{v}' is not one of the allowed values {list(Color)}") return v ``` 这样修改之后,既可以直接传递枚举对象也可以用其名称表示法进行赋值[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值