问题描述
||
我是Java正则表达式的新手,我需要验证字符串是否仅包含字母数字字符,逗号,撇号和句号(句点)。其他任何事情都应等同于错误。
任何人都可以指点一下吗?
我现在有这个,我相信字符串中的每个字符都有字母数字:
Pattern p = Pattern.compile(\"^[a-zA-Z0-9_\\\\s]{1,\" + s.length() + \"}\");
谢谢
奥尔巴尼·卡克斯顿先生
解决方法
我是Java正则表达式的新手,我需要验证字符串是否仅包含字母数字字符,逗号,撇号和句号(句点)。
我建议您使用
\\p{Alnum}
类来匹配字母数字字符:
Pattern p = Pattern.compile(\"[\\\\p{Alnum},.\']*\");
(我注意到您在当前模式中包括了\\s
。如果您也想允许空格,只需在字符类中添加\\s
。)
从Pattern
的文档中:
[...]
\\p{Alnum}
字母数字字符:[\\p{Alpha}\\p{Digit}]
[...]
您不需要包含^
和{1,...}
。只需使用Matcher.matches
或String.matches
之类的方法即可匹配完整模式。
另外,请注意,您无需在字符类([
...]
)中转义.
。
, Pattern p = Pattern.compile(\"^[a-zA-Z0-9_\\\\s\\\\.,]{1,\" + s.length() + \"}$\");
, 把事情简单化:
String x = \"some string\";
boolean matches = x.matches(\"^[\\\\w.,\']*$\");