我在SO和网络上都发现了很多关于这个主题的变化,但是大多数(如果不是全部的话)要求至少一个字母和一个数字。我需要至少一封信。 我已经尝试但是我没有做对,我需要的是String只包含字母,字母+数字(任何顺序),破折号和空格是允许的,但不是在开头或结尾处串。现在看来它是这样的:
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!");
}
}
如何添加检查是否至少有一个字符?
无论是在开头还是结尾,或者它与数字之间是否有空格或短划线。必须至少有一个角色。
答案 0 :(得分:2)
您可以将此正则表达式用于您的问题:
^(?=.*\pL)[\pL\pN]+(?:[ -]+[\pL\pN]+)*$
对于Java使用:
final String regex = "^(?=.*\\pL)[\\pL\\pN]+(?:[ -]+[\\pL\\pN]+)*$";
RegEx分手:
^
:开始(?=.*\pL)
:使用前瞻确保我们在某个地方至少有一个unicode字母[\pL\pN]+
:匹配一个或多个unicode字母或unicode数字(?:
:非捕获组开始
[ -]+
:匹配一个或多个空格或连字符[\pL\pN]+
:匹配一个或多个unicode字母或unicode数字)*
:非捕获组结束。 *
表示此群组中的零个或多个。$
:结束答案 1 :(得分:1)
如果我理解正确,并根据您提供的内容,您有以下条件:
根据这些条件,以下正则表达式将起作用:
^(?![ -]|\d+$)[[:alnum:] -]+(?<![ -])$
要查看正在使用的此正则表达式,请点击this链接 这个正则表达式的工作原理如下:
-
或空格
-
或空格
这将为您提供以下匹配
Street
Some-Street
Street
1 st street
street 5
正则表达式将无法匹配以下字符串(根据您的示例)
Street
Street
Street-
-Street
111
否定的外观有时会导致某些语言(如java)出现问题。
以下是我以前的正则表达式的改编版本,它使用负前瞻而不是负向后看,以确保字符串不以连字符-
或空格结束。
^(?![ -]|\d+$)(?:(?![ -]$)[\pL\pN -])+$
您可以在使用here
中看到此正则表达式答案 2 :(得分:0)
以下正则表达式完成工作:
If (/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!$%&*:;#~@])[\da-zA-Z!$%&*:;#~@]$/.test(userin) === false) then alert 'xxxx';
(?=。* [[:alpha:]])部分保证alpha字符[A-Za-z] 存在于单词内。
[[:alnum:]] {1} 部分保证字符串以字母数字开头 字符[A-Za-z0-9]
[[:alnum:] - ] * 字母数字字符,空格和破折号字符 可能存在于这里。
[[:alnum:]] {1} 部分保证字符串以字母数字结尾 字符[A-Za-z0-9]
要查看它Offline Plugin