【问题标题】:Java Spring form check whether a input string contains special characters or notJava Spring表单检查输入字符串是否包含特殊字符
【发布时间】:2019-02-14 07:12:48
【问题描述】:

我正在尝试创建一个 Java Spring 表单来检查输入字符串是否包含特殊字符。例如,当用户键入包含特殊字符的字符串时,会弹出一条消息,说明输入的字符串包含特殊字符。

我的问题是如何实现java函数来检查输入字符串中的特殊字符?

型号

 package com.mkyong.customer.model;

public class Customer {
	
	String userName;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
	
}

控制器

package com.mkyong.customer.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import com.mkyong.customer.model.Customer;

public class TextBoxController extends SimpleFormController{
	
	public TextBoxController(){
		setCommandClass(Customer.class);
		setCommandName("customerForm");
	}
	
	@Override
	protected ModelAndView onSubmit(HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {

		Customer customer = (Customer)command;
		return new ModelAndView("CustomerSuccess","customer",customer);
	
	}
	
}

客户表格

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<style>
.error {
	color: #ff0000;
}

.errorblock{
	color: #000;
	background-color: #ffEEEE;
	border: 3px solid #ff0000;
	padding:8px;
	margin:16px;
}
</style>
</head>

<body>
<h2>Java Textbox Special Characters</h2>

<form:form method="POST" commandName="customerForm">

<form:errors path="*" cssClass="errorblock" element="div"/>

<table>
<tr>
<td>Keyword:</td>
<td><form:input path="userName" /></td>
<td><form:errors path="userName" cssClass="error" /></td>
</tr>
<tr>
<td colspan="3"><input type="submit" /></td>
</tr>
</table>
</form:form>

</body>
</html>

客户成功

<html>
<body>
<h2>Java Textbox Special Characters</h2>

Keyword: ${customer.userName}

</body>
</html>

【问题讨论】:

  • 问题是什么?
  • 我的问题是如何实现java函数来检查输入字符串中的特殊字符?

标签: java spring-mvc


【解决方案1】:

您可以拥有所有特殊字符的列表并使用正则表达式进行检查:

Pattern regex = Pattern.compile("[$&+,:;=\\\\?@#|/'<>.^*()%!-]"); // fill in any chars that you consider special

if (regex.matcher(stringToCheck).find()) {
    // found
} 

您还可以查看Guava's CharMatcher(没有正则表达式并且更具可读性)。您可以像这样构建自己的匹配逻辑:

boolean isAMatch = CharMatcher.WHITESPACE
    .or(CharMatcher.anyOf("[$&+,:;=\\\\?@#|/'<>.^*()%!-]")) // fill in any chars that you consider special
    .matchesAnyOf(stringToCheck);

【讨论】:

  • 不应该是matchesAnyOf吗?否则它将检查是否所有特殊字符都在 stringToCheck
【解决方案2】:

转换特殊字符的单独方法

if(checkSpecialChar("^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$", source){
    // add your staff here
}

public boolean checkSpecialChar(String regex, String source) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(source);
    return matcher.find();

【讨论】:

    【解决方案3】:

    在 Spring 中,您可以像这样获取 Form 的值:

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("userName")String username){
        // And now you can check with the regex pattern from hovanessyan if it contains special characters
       Pattern regex = Pattern.compile("[$&+,:;=\\\\?@#|/'<>.^*()%!-]");
       if (regex.matcher(username).find()) {
          // found
       }
    }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 2016-08-24
      • 2016-08-01
      • 2014-11-25
      • 2015-05-06
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      相关资源
      最近更新 更多