You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何检测输入含@符号?JSF验证代码修改求助

解决JSF输入字段的空格与@符号验证问题

我来帮你搞定这个JSF验证的小问题!你之前的问题主要是逻辑判断的条件组合错了,还有对value的处理可以更严谨些,咱们一步步调整:

问题拆解

你的需求是两个验证规则:

  • 不能只输入空格(这个你已经实现了)
  • 不能输入包含@符号的内容(这部分没生效)

之前你尝试用&& value.contains("@")是逻辑搞反了——咱们要的是只要满足“全空格”或者“包含@”其中一个情况,就抛出错误,所以应该用||(或)而不是&&(且)。另外,直接调用value.toString()万一value是null的话会触发空指针异常,最好先做个空判断。

修改后的完整代码

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
    // 先把Object类型的value安全转成String,避免空指针
    String rawInput = value == null ? "" : value.toString();
    String trimmedInput = rawInput.trim();
    
    // 验证规则:全空格 或者 包含@符号,就触发错误
    if (trimmedInput.isEmpty() || rawInput.contains("@")) { 
        FacesMessage msg = new FacesMessage("无效输入", "请输入不包含@符号和空格的有效内容。"); 
        msg.setSeverity(FacesMessage.SEVERITY_ERROR); 
        throw new ValidatorException(msg); 
    } 
}

关键调整说明

  1. 安全的类型转换:先判断value是否为null,避免调用toString()时出现NullPointerException;同时把原始输入和trim后的输入分开存,方便分别判断。
  2. 修正判断逻辑:用||连接两个条件——只要输入是全空格,或者原始输入里包含@(哪怕和其他内容混在一起),就抛出错误提示。
  3. 如果要禁止任何空格(包括中间的):
    要是你的需求是连输入内容中间的空格也不能有,那可以再加一个判断条件:
    if (trimmedInput.isEmpty() || rawInput.contains("@") || rawInput.contains(" ")) { 
        // 错误提示...
    }
    

这样调整后,就能完美实现你要的验证效果啦!

内容的提问来源于stack exchange,提问作者user8980385

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:16