精华内容
下载资源
问答
  • 对于四个权限修饰符的作用范围,不再赘述,仅给出验证程序,供大家参考

    对于四个权限修饰符的作用范围,不再赘述,仅给出验证程序,供大家参考。

    package bb;
    
    public class B{
    	
    	private int x=2;
    	private int y=3;
    	
    	//
    	void show1(){
    		System.out.println(x);
    	}
    	protected void show2(){
    		System.out.println(y);
    	}
    }
    package dd;
    
    public class D{
    	
    	private int z=4;
    	
    	protected void show3(){
    		System.out.println(z);
    	}
    	public void show4(){
    		System.out.println(z);
    	}
    }
    import bb.*;
    import dd.*;
    
    class A{
    	
    	private int i=1;
    	
    	private int getI(){
    		return i;
    	}
    	void show(){
    		System.out.println(getI());
    	}
    }
    
    public class TestAcess extends B{
    	public static void main(String [] args){
    		
    		A a=new A();
    		D d=new D();
    		TestAcess c=new TestAcess();
    		
    		//a.getI();
    		/*
    		  说明在类的外部不能访问私有成员。
    		  报错:TestAcess.java:31: 错误: getI()可以在A中访问private
                    a.getI();
                     ^
    		*/
    		a.show();
    		/*
    		  说明在同一个包内、类的外部可以访问默认成员;
    		  而且私有成员可以在类的内部实现访问。
    		*/
    		//c.show1();
    		/*
    		  说明在不同的包的子类,不能访问其父类的默认成员
    		  报错:TestAcess.java:43:错误: 找不到符号
                    c.show1();
                     ^
    			符号:   方法 show1()
    			位置: 类型为C的变量 c
    		*/
    		c.show2();
    		/*
    		  说明在不同的包的子类,能访问其父类的保护成员
    		*/
    		
    		//d.show3();
    		/*
    		  说明在不同的包的不同类之间,不能访问保护成员
    		  报错:TestAcess.java:61: 错误: show3()可以在D中访问protected
                    d.show3();
                     ^
    		*/
    		d.show4();
    		/*
    		  说明在不同的包的不同类之间,能访问公有成员
    		*/
    	}
    }




    展开全文
  • 主要介绍了JS正则表达式验证端口范围(0-65535),文中给大家提到了Js正则表达式验证IP+端口号的代码,需要的朋友可以参考
  • js正正则则表表达达式式验验证证大大全全(收收集集) 本篇文章给大家分享js正则表达式验证大全平时收集的知识比较全面需要的朋友可以参考下 引 网址 /quiteuniverse/blog/item/9f3f043d46ad1e0 bba16 16.html 以以下...
  • ThinkPHP 自动验证定义的附加规则如下:regex:使用正则进行验证(默认)unique:验证唯一性confirm:验证表单中的两个字段是否相同equal:验证是否等于某个值in:验证是否在某个范围内function:使用函数验证callback...

    ThinkPHP 自动验证定义的附加规则如下:regex:使用正则进行验证(默认)unique:验证唯一性confirm:验证表单中的两个字段是否相同equal:验证是否等于某个值in:验证是否在某个范围内function:使用函数验证callback:使用方法验证自动验证例子各种自动验证参考例子如下:// 默认情况下用正则进行验证

    array('title','require','标题不能为空。'),

    array('order','number','排序必须是数字。',2),

    array('email','email','邮箱格式不符合要求。'),

    array('qq','qq','QQ号码不正确。'),

    // 在新增的时候验证标题title字段是否唯一

    array('title','','标题已经存在!',0,'unique',1),

    // 验证确认密码是否和密码一致

    array('repassword','password','确认密码不正确。',0,'confirm'),

    // 验证class填写的值为 一班

    array('class','一班','班级必须填写一班。',0,'equal'),

    // 当值不为空的时候判断是否在一个范围内

    array('value',array(1,2,3),'值的范围不正确。',2,'in'),

    // 自定义函数验证用户名格式

    array('username','checkName','用户名格式不正确。',0,'function'),

    // 在注册或更改资料是调用 checkEmail 方法检查邮箱

    array('email','checkEmail',1,'callback'),

    使用正则表达式(regex)验证上述几类附加规则中,使用正则表达式是经常使用的,也是系统默认的验证附加规则。系统内置了如下正则检测规则:require(必须)、email(邮箱格式)、url(URL地址)、currency(货币)、number(数字)、qq(QQ号码)、english(英文字符)。这些附加规则可以直接使用,如果这些附加规则无法满足要求,可以使用自定义的正则规则:array('username','/^{3,15}$/','用户名不符合要求。'),该规则要求用户名只能为英文字符及下划线和数字组成,且长度为3-15个字节。要了解更多的正则表达式规则参见《PHP 常用正则表达式整理》。使用自定义函数(function)验证使用自定义函数验证附加规则,函数可以是 Common/common.php 里的自定义函数,也可以是 PHP 的内置函数:

    class UserModel extends Model{

    protected $_validate = array(

    array('username','checkName','用户名不符合要求。',0,'function'),

    };

    }

    自定义 checkName 函数:

    function checkName($username){

    if(!preg_match('/^{3,15}$/', $username)){

    return false;

    }else{

    return true;

    }

    }

    提示:对于用户名的规则可以直接使用正则验证而无需函数,在此只是为了演示自定义函数的验证的用法而已。使用方法(callback)验证ThinkPHP 自动验证还支持调用当前 Model 类的一个方法来进行验证。

    class UserModel extends Model{

    protected $_validate = array(

    array('email','checkEmail','邮箱已经存在。',1,'callback'),

    };

    // checkEmail方法

    2

    protected function checkEmail(){

    $User=new Model('User');

    // 新用户注册,验证唯一

    if(empty($_POST)){

    if($user->getByEmail($_POST)){

    return false;

    }else{

    return true;

    }

    }else{

    // 更改资料判断邮箱与其他人的邮箱是否相同

    if($user->where("uid!={$_POST} and email='{$_POST}'")->find()){

    return false;

    }else{

    return true;

    }

    }

    }

    }

    当 checkEmail 方法返回 false 时,验证就不通过。可见 ThinkPHP 自动验证功能十分强大,能满足对表单的各种验证要求。

    展开全文
  • 滑动拼图验证

    2020-09-23 19:17:34
    3.逻辑:底部滑块的拖动控制小拼图移动,当其左边距与切割位置x坐标一致,或在一定范围内,即为正确;难点在于切割出来拼图,这一步参考上面链接地址; 4.项目地址:https://gitee.com/beiysd/react-template 5....

     1.参考地址:https://www.cnblogs.com/huanglei-/p/8568405.html

     2.效果:

     3.逻辑:底部滑块的拖动控制小拼图移动,当其左边距与切割位置x坐标一致,或在一定范围内,即为正确;难点在于切割出来拼图,这一步参考上面链接地址;

    4.项目地址:https://gitee.com/beiysd/react-methors.git

    5.部分源码如下:

    /**
     * @name BlockImgMove
     * @description 滑动拼图验证
     */
    
    import React, { Component } from "react";
    import Title from "@/component/Title";
    import { Icon, Spin } from "antd";
    import { main } from "@/utils/base64";
    import styles from "./styles.module.less";
    const imgSrc = require("@/assets/img/10355.jpg");
    const canWidth = 300; //容器宽
    const canHeight = 160; //容器高
    const canLitWidth = 42; //图片滑块宽
    const canLitR = 10; //滑块附带小圆半径
    const canLitL = canLitWidth + canLitR * 2 + 3; //小拼图实际边长
    const PI = Math.PI; //圆周率
    class BlockImgMove extends Component {
      state = {
        blockX: 0, //小拼图X轴坐标
        textMess: "向右移动拼接图片,完成验证",
        type: false, //验证状态,false为验证失败,true验证成功
        loading: false, //加载状态
        canvasRand: "",
        blockRand: "",
        imgPath: ""
      };
      y = 0; //小拼图达到的Y轴坐标
      x = 0; //小拼图达到的X轴坐标
      img = null;
      componentDidMount() {
        this.onMouseDown();
        this.init();
      }
      init = () => {
        this.y = 0;
        this.x = 0;
        // this.img = null;
        this.setState(
          {
            type: false,
            blockX: 0,
            textMess: "向右移动拼接图片,完成验证",
            canvasRand: `canvas${this.getRandomNumberByRange(0, 100)}`, //"canvasRand", //this.getRandomNumberByRange(0, 100)
            blockRand: `block${this.getRandomNumberByRange(101, 200)}` // "blockRand" //this.getRandomNumberByRange(101, 200)
          },
          () => {
            this.getImg();
          }
        );
      };
      /**
       * @name onMouseDown
       * @description 监听鼠标点击
       */
      onMouseDown = () => {
        let outBox = document.getElementById("out_mouse_img");
        let mouseBox = document.getElementById("mouse_img");
        let that = this;
    
        mouseBox.onmousedown = function (ev) {
          let ev00 = ev || window.event;
          let px = ev00.pageX; //初始位置,对于整个页面来说,光标点击位置
          let oL = this.offsetLeft; //初始位置,对于有定位的父级,元素边框侧与父级边框侧的距离 初始为0
    
          mouseBox.onmousemove = function (evs) {
            if (that.state.type) {
              return;
            }
            let ev01 = evs || window.event;
            let px1 = ev01.pageX; //滑动后,当前鼠标所在位置
            let oL1 = px1 - px + oL; //距初始位置移动的距离
            if (oL1 <= 0) {
              oL1 = 0;
            } else if (oL1 > outBox.clientWidth - mouseBox.clientWidth) {
              oL1 = outBox.clientWidth - mouseBox.clientWidth;
            }
            // console.log("oL1===", oL1);
            that.setState({ blockX: oL1 });
          };
          mouseBox.onmouseup = function () {
            that.cancelMove();
          };
        };
      };
      /**
       * @name textChange
       * @description 验证成功,信息变化
       */
      textChange = () => {
        this.setState({ textMess: "验证成功", type: true });
      };
      /**
       * @name cancelMove
       * @description 鼠标离开滑块,滑块停止滑动并复位
       */
      cancelMove = () => {
        let mouseBox = document.getElementById("mouse_img");
        let mouseLeft = mouseBox.offsetLeft;
        mouseBox.onmousemove = null;
        if (mouseLeft !== 0)
          if (mouseLeft === this.x || (mouseLeft <= this.x + 3 && mouseLeft >= this.x - 3)) {
            //验证成功的不可逆操作
            this.onmousemove = null;
            mouseBox.onmousemove = null;
            this.textChange();
          } else {
            this.init();
          }
      };
      /**
       * @name getRandomNumberByRange
       * @description 获取随机数
       */
      getRandomNumberByRange = (start, end) => {
        return Math.round(Math.random() * (end - start) + start);
      };
    
      /**
       * @name getImg
       * @description 获取在线图片,图片资源与项目地址源不同导致跨域,需处理跨域
       */
      getImg = async () => {
        const url = `/api-online-img/${canWidth}/${canHeight}/?image=${this.getRandomNumberByRange(1, 100)}`;
        try {
          this.setState({ loading: true });
          //不同源图片,这里是先把线上图片转为base64,再进行渲染,时间上稍微多了1-2秒
          main(url, (base64) => {
            //线上图片出错转用本地图片
            this.setState({ imgPath: base64 ? base64 : imgSrc }, () => {
              this.setState({ loading: false });
              this.drawInit();
            });
          });
        } catch (error) {
          console.log("err==", error);
        }
      };
      /**
       * @name draw
       * @description 画图公用方法
       */
      draw = (ctx, x = 0, y = 0, w = 0, operation) => {
        let r = canLitR;
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.arc(x + w / 2, y - r + 2, r, 0.72 * PI, 2.26 * PI);
        ctx.lineTo(x + w, y);
        ctx.arc(x + w + r - 2, y + w / 2, r, 1.21 * PI, 2.78 * PI);
        ctx.lineTo(x + w, y + w);
        ctx.lineTo(x, y + w);
        ctx.arc(x + r - 2, y + w / 2, r + 0.4, 2.76 * PI, 1.24 * PI, true);
        ctx.lineTo(x, y);
        ctx.lineWidth = 2;
        ctx.fillStyle = "rgba(255, 255, 255, 0.7)";
        ctx.strokeStyle = "rgba(255, 255, 255, 0.7)";
        ctx.stroke();
        ctx.globalCompositeOperation = "destination-over";
        operation === "fill" ? ctx.fill() : ctx.clip();
      };
      /**
       * @name drawInit
       * @description 画图前处理
       */
      drawInit = async () => {
        const { canvasRand, blockRand, imgPath } = this.state;
        const mycanvas = document.getElementById(canvasRand);
        const myblock = document.getElementById(blockRand);
        myblock.width = canWidth;//等宽获取整个图片
        const canvas_ctx = mycanvas.getContext("2d");
        const block_ctx = myblock.getContext("2d");
        //清空画布
        canvas_ctx.clearRect(0, 0, canWidth, canHeight);
        block_ctx.clearRect(0, 0, canWidth, canHeight);
        this.img = document.createElement("img"); //创建小图片滑块
        // 随机位置创建拼图形状
        this.x = this.getRandomNumberByRange(canLitL + 10, canWidth - (canLitL + 10));
        this.y = this.getRandomNumberByRange(10 + canLitR * 2, canHeight - (canLitL + 10));
        //渲染图片
        this.img.onload = async () => {
          canvas_ctx.drawImage(this.img, 0, 0, canWidth, canHeight);
          block_ctx.drawImage(this.img, 0, 0, canWidth, canHeight);
          let _y = this.y - canLitR * 2 - 1; //小拼图实际的坐标
    
          let ImgData = block_ctx.getImageData(this.x - 5, _y - 3, canLitL, canLitL);
          myblock.width = canLitL;//小拼图的宽,隐藏抠图位置图片
          block_ctx.putImageData(ImgData, 0, _y);
        };
        this.img.src = imgPath; //图片路径
    
        this.draw(canvas_ctx, this.x, this.y, canLitWidth, "fill");
        this.draw(block_ctx, this.x, this.y, canLitWidth, "clip");
      };
    
      render() {
        const { textMess, type, blockX, loading, canvasRand, blockRand } = this.state;
        return (
          <div>
            <h3>BlockImgMove</h3>
            <div className={styles.block}>
              <Title text="滑动拼图验证" />
              <div>
                <div className={styles.outDiv}>
                  <Spin spinning={loading}>
                    <div className={styles.outDivNext}>
                      <Icon type="redo" className={styles.redos} onClick={this.init} />
                      <canvas id={canvasRand} className={styles.outDivNoborder}></canvas>
                      <canvas id={blockRand} className={styles.outDivLitBlock} style={{ left: blockX }}></canvas>
                    </div>
                  </Spin>
                </div>
    
                {/**滑块 */}
                <div id="out_mouse_img" className={styles.outBkock}>
                  <div id="mouse_img" className={styles.moveBkock} style={{ cursor: type ? "default" : null, marginLeft: blockX }} onMouseLeave={this.cancelMove}>
                    {type ? <Icon type="check-circle" className={styles.icon_check} /> : <Icon type="arrow-right" className={styles.icon_check} />}
                  </div>
                  {/**蓝色背景 */}
                  <div id="colorbg_img" className={styles.posBkockColor} style={{ width: blockX }}>
                    {type && <div style={{ color: "#fff" }}>{textMess}</div>}
                  </div>
                  {/**默认背景 */}
                  <div className={styles.posBkockDefault}>{!type && <div>{blockX === 0 && textMess}</div>}</div>
                </div>
              </div>
            </div>
          </div>
        );
      }
    }
    export default BlockImgMove;
    

     

    展开全文
  • 前言提示,antd官网的文档说明怎么...投标利率我们设置在(3%-7%)以内,也就是说,输入框不能取值的范围是3-7(符合3-7就触发不了表单验证了!),当投标状态是“投标”(共三种)时,该投标利率表单验证生效,如果...

    前言提示,antd官网的文档说明怎么样看参数?其实是参考的typeScript的规则写法:

     

    备注(投标的3种状态):

    当我们使用antd的Form表单时,可能会遇到2个表单联动的情况,试想一下以下场景:

    投标利率我们设置在(3%-7%)以内,也就是说,输入框不能取值的范围是3-7(符合3-7就触发不了表单验证了!),当投标状态是“投标”(共三种)时,该投标利率表单验证生效,如果选择其他状态,则不生效,如果原本已有验证提示,需要清空原本的验证

     

     

    那么,如何清除表单验证?清除表单验证antd提供了1个api(resetFields):

    // 众所周知,antd的Form组件必须经过Create才能找到this.props.form属性,在此不再展开

    // export default Form.create()(ProjInfoForm)  <!--ProjInfoForm是组件名-->

     

    使用以下两句解决问题:

    // 重置表单tenderStatus属性的值以及表单验证提示(值会变成initialValue的值)

    this.props.form.resetFields(['tenderStatus']);

    // 将我们重置之前储存好的属性值,给联动表单的属性重新赋值,否则会变成initialValue的值

    this.props.form.setFieldsValue({ tenderStatus: status });

     

    完整代码如下: 

    <FormItem>

                          {getFieldDecorator(postField || dataIndex, {

                            initialValue: tenderRate,

                            rules: [

                              {

                                validator: (rule, value, callback) => {

                                  if (prdApplySection1 === 0 && prdApplySection2 === 0) {

                                    callback()

                                    return

                                  }

                                  // console.log('this.props.form.getFieldsValue()', this.props.form.getFieldsValue())

                                  const status = this.props.form.getFieldsValue().tenderStatus;

                                  if (+status === 2) {

                                    if (+value < +prdApplySection1 || +value > +prdApplySection2) {

                                      callback(`不在申购区间内,申购区间:${prdApplySection1}%~${prdApplySection2}%, 或者将投标状态改为”意向”`)

                                    } else {

                                      this.props.form.resetFields(['tenderStatus']);

                                      this.props.form.setFieldsValue({ tenderStatus: status });

                                      callback();

                                    }

                                  }

                                  callback()

                                }

                              },

                              { required: true, message: `请输入${title}` }

                            ],

                          })(

                            <InputNumber

                              disabled={sessionStorage['scaleType'] == '0'}

                              placeholder="投标单位"

                              //formatter={value => `${value}${sessionStorage['unit']}`}

                              //parse={value => value.replace(/(%|bp|元)*/g, '')}

                              style={{ width: "100%" }}

                              max={100}

                              min={0}

                            />

                          )}

    </FormItem>

     

    展开全文
  • 确保将此脚本的输出保存到build/ropsten/migration_log.txt中,以供参考,因为它记录了部署每个合约的地址。 验证Etherscan上的合同代码( ) 使用以下命令为每个已部署合同构建单文件副本: npm
  • 适用范围:Microsoft:registered:SQLServer:trade_mark:2000ReportingServices摘要:了解有关ReportingServices安全扩展方面的知识,着重学习窗体身份验证。此外,下载和部署ReportingServices的窗体身份验证扩展...
  • ElementUI 表单验证数据的正确姿势

    万次阅读 2018-07-25 11:09:44
    ElementUI 表单验证数据的正确姿势 ...参考 ElementUI 的官方文档,可以有这样的验证规则,验证第一个条件: rules: { acquaintance: [{ required: true, message: '请输入熟悉程度', trigger: 'blur' ...
  • 在对全息成像原理仔细分析的基础上,提出通过综合考虑多个参数进而确定参考光强取值范围的方法,并用透射和反射同轴数字全息成像实验及基于实验结果的图像重建验证了进一步缩小参考光强取值范围的有效性。...
  • 在用户提交邮箱地址以后我们需要验证用户邮箱地址是否合法,解决方案的范围很广,可以通过使用正则表达式来检查电子邮件地址的格式是否正确,甚至可以通过尝试与远程服务器进行交互来解决问题。两者之间也有一些中间...
  • 首先区分两个概念:‘模型评估’ 与 ‘模型性能度量’模型评估:这里强调的是... 参考之前的介绍 Keywords: 具体问题的性能这部分要讨论的问题是模型评估,根据上面定义的研究范围,模型评估就是在讲怎么划分和使用...
  • 如果你要精确验证手机号码,那个你可以使用第一个正则。这是根据电信,移动,联通目前发行的号码来的。验证比较精确。 ^1[3|4|5|7|8][0-9]{9}$ ...参考:手机号码验证的正则表达式 转载于:htt...
  • 使用javascript技术验真实姓名,要用到unicode字符来匹配,由于中国人的姓名长度一般是在2-4这个范围内,所以重复匹配{2,4}次。接下来,通过本文给大家分享js验证省份证号与真实姓名是否匹配,需要的朋友可以参考
  • 表单验证规则实现参考 参考了jQuery.validators.js的实现,使用“n~m”来标记范围 规则 - Rules 使用 - Usage validators.email("12345@mail.com"); // true validators.positive()("12345"); // true validators...
  • 快速学习jQuery插件中的jquery.validate.js表单验证插件使用方法,Validation是历史最悠久的jQuery插件之一,经过了全球范围内不同项目的验证,并得到了许多Web开发者的好评,感兴趣的小伙伴们可以参考一下
  • 1、创建请求参数实体类2、编写访问方法3、页面访问1、sex 属性的值在 Sex 枚举的范围之内2、sex 属性的值不在 Sex 枚举的范围之内四、对应关系五、参考文档 一、背景 在我们系统中,有部分字段的值是枚举类型的,...
  • ASP.NET公有六种验证控件,分别如下:控件名功能描叙RequiredFieldValidator(必须字段验证)用于检查是否有输入值CompareValidator(比较验证)按设定比较两个输入RangeValidator(范围验证)输入是否在指定范围...
  • RangeBar范围选择器.rar

    2019-07-30 11:19:03
    RangeBar范围选择器.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 本文实例讲述了正则表达式验证IPV4地址功能。分享给大家供大家参考,具体如下: IPV4地址由4个组数字组成,每组数字之间以.分隔,每组数字的取值范围是0-255。 IPV4必须满足以下四条规则: 1、任何一个1位或2位数字...
  • 自定义规则:数组的元素最长1个长度,元素范围为大写A-D 代码参考 控制器层: $validate = validate('Curriculum'); if (!$validate->scene('get_classify_course')->check($data)) { ...
  • 为了进一步验证定向钻孔测量精度,进行了定向钻孔穿透巷道的现场试验。试验表明,随钻测量系统测量精度高,上下位移...由于上下位移相对左右位移精度较高,因此精确控制时应以上下位移为参考,同时考虑左右位移误差范围
  • 为了提高双光纤点衍射干涉仪的检测精度,需要对干涉仪装置中两个波前参考源(WRS)的系统误差进行标定。设计了波前参考源的标定过程及标定算法,通过...通过模拟验证了标定算法的正确性并给出波前参考源的旋转公差范围
  • 三菱 SLMP参考手册.zip

    2019-10-21 02:33:32
    三菱 SLMP参考手册zip,本手册是用于让用户了解使用SLMP(SeamLess Message Protocol)时的必要对应设备、访问范围、通信步骤、 报文格式有关内容的手册。在使用之前应熟读本手册,在充分了解SLMP的基础上正确地使用本...
  • 本文使用Go Gin框架搭建的webserver示例,其中使用jwt进行登录验证,至于cookies session jwt token的区别,优缺点不再本位讨论范围内。 简单总结:使用jwt更方便,具有一定程度安全性, 具体使用Gin搭建webserver...
  • Hibernate Validator是JSR30一个参考实现,除支持所有标准的校验注解外,还支持以下的扩展注解 注解 功能说明 @Email 电子邮件 @Length 字符串的大小在指定范围内 @NotEmpty字符串非空 @Range元素必须在合适的范围内...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 635
精华内容 254
关键字:

参考范围验证