【发布时间】:2017-09-11 23:33:10
【问题描述】:
我在 SO 和 Web 上发现了很多关于这个主题的变体,但大多数(如果不是全部)要求至少一个字母和一个数字。我需要至少一封信。 我试过了,但我没有做对,我需要的是字符串只包含字母、字母+数字(任何顺序)、破折号和空格是允许的,但不能在字符串的开头或结尾。这是它现在的样子:
protected static final String PATTERN = "[\u00C0-\u017Fa-zA-Z0-9']+([- ][\u00C0-\u017Fa-zA-Z0-9']+)*";
public static void main(String[] args) {
String name;
//name = "Street"; // allowed
//name = "Some-Street"; // allowed
//name = "Street "; // not allowed
//name = " Street"; // not allowed
//name = "Street-"; // not allowed
//name = "-Street"; // not allowed
//name = "Street"; // allowed
//name = "1 st street"; // allowed
//name = "street 5"; // allowed
name = "111"; // NOT allowed
if (!Pattern.matches(PATTERN, name)) {
System.out.println("ERROR!");
} else System.out.println("OK!");
}
}
如何添加检查是否至少有一个字符?
无论是在开头还是结尾,或者它与数字之间是否有空格或破折号。必须至少有一个字符。
【问题讨论】:
-
您想要至少 1 个字符还是 1 个字母?那是非常不同的。
-
如果你不允许开头或结尾的空格,在保存之前
trim()字符串不是更方便用户吗?空间通常不可见,这会让用户感到困惑和沮丧。 -
"A"是有效输入吗? -
trim()可用于前端或后端。后端开发对于字符串格式化会更好,因为用户无法将其关闭。你绝对应该在后端清理你的字符串,而不是依赖任何基于前端的东西。