gpt4 book ai didi

java - 用于 ASCII 符号的 Hibernate @Pattern 正则表达式 validator

转载 作者:行者123 更新时间:2023-12-01 09:40:07 25 4
gpt4 key购买 nike

我需要验证用户仅输入英文文本。所以它可以是带有一些标点符号的拉丁字母。现在我编写以下正则表达式:

@NotEmpty
@Pattern(regexp = "^[ \\w \\d \\s \\. \\& \\+ \\- \\, \\! \\@ \\# \\$ \\% \\^ \\* \\( \\) \\; \\\\ \\/ \\| \\< \\> \\\" \\' \\? \\= \\: \\[ \\] ]*$")
private String str;

而且效果很好。
但我想到了更优雅的方式:我想验证我的字符串仅包含 ASCII 符号。我可以用一些特殊的注释或参数来做到这一点吗?或者我需要为此编写自定义 validator ? (你能帮我举个例子吗?)。

我想要这样的东西:

static CharsetEncoder asciiEncoder = Charset.forName("US-ASCII"); // or "ISO-8859-1" for ISO Latin 1

boolean isValid(String input) {
return asciiEncoder.canEncode(input);
}

最佳答案

选项 1:

Java 中的字符串始终编码为 UTF-16,其中 ASCII 字符集包含在 0-127 范围内。因此任何非 ASCII 字符都不会包含 0 到 127 之间的数字。

str.chars().allMatch(c -> c < 128);

选项 2:正则表达式

public class Main {
public static void main(String[] args) {
char nonAscii = 0x00FF;
String asciiText = "Day";
String nonAsciiText = "Night " + nonAscii;
System.out.println(asciiText.matches("\\A\\p{ASCII}*\\z"));
System.out.println(nonAsciiText.matches("\\A\\p{ASCII}*\\z"));
}
}

选项3:使用java.nio.charset.Charset

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

public class StringUtils {

static CharsetEncoder asciiEncoder =
StandardCharsets.US_ASCII.newEncoder();

public static boolean isPureAscii(String v) {
return asciiEncoder.canEncode(v);
}

public static void main (String args[])
throws Exception {

String test = "Réal";
System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));
test = "Real";
System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));
}
}

选项 4:使用第 3 方 Guava

boolean isAscii = CharMatcher.ascii(someString);

引用:

选项 1 引用 JeremyP 和 Julian Lettner 的文章 https://stackoverflow.com/a/3585791/1245478

选项 2 引用了 Arne https://stackoverflow.com/a/3585284/1245478

选项 3 引用来自 https://stackoverflow.com/a/3585247/1245478 的 RealHowTo

选项 4 引用了 Colin D 的 https://stackoverflow.com/a/3585089/1245478

关于java - 用于 ASCII 符号的 Hibernate @Pattern 正则表达式 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com