【问题标题】:Java-based regular expression to allow alphanumeric chars and ', and基于 Java 的正则表达式,允许使用字母数字字符和 ',以及
【发布时间】:2011-06-14 11:52:40
【问题描述】:

我是 Java 正则表达式的新手,我需要验证字符串是否仅包含字母数字字符、逗号、撇号和句号(句点)。其他任何东西都应该等同于假。

谁能指点一下?

我现在有这个,我相信它对字符串中的每个字符都有字母数字:

 Pattern p = Pattern.compile("^[a-zA-Z0-9_\\s]{1," + s.length() + "}");

谢谢

奥尔巴尼·卡克斯顿先生

【问题讨论】:

标签: java regex


【解决方案1】:

我是 Java 正则表达式的新手,我需要验证字符串是否包含 字母数字字符逗号撇号句号(句号)。

我建议你使用\p{Alnum} 类来匹配字母数字字符:

Pattern p = Pattern.compile("[\\p{Alnum},.']*");

(我注意到您在当前模式中包含\s。如果您也想允许空白,只需在字符类中添加\s。)

来自documentation of Pattern

[...]

\p{Alnum} 一个字母数字字符:[\p{Alpha}\p{Digit}]

[...]


您不需要包含^{1, ...}。只需使用 Matcher.matchesString.matches 之类的方法来匹配完整的模式。

另外,请注意,您不需要在字符类 ([...]) 中转义 .

【讨论】:

    【解决方案2】:
    Pattern p = Pattern.compile("^[a-zA-Z0-9_\\s\\.,]{1," + s.length() + "}$");
    

    【讨论】:

    • 提供非法转义字符。
    • 对不起,每一个反斜杠都要加倍,否则就是非法的,没错。
    • 认为应该是: Pattern p = Pattern.compile("^[a-zA-Z0-9_\\s\\.',]{1," + s.length() + "}$");
    【解决方案3】:

    保持简单:

    String x = "some string";
    boolean matches = x.matches("^[\\w.,']*$");
    

    【讨论】:

    • 对于matches,无需包含^$
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多