Java正则表达式检查是否至少有一个字母

时间:2017-09-11 13:47:48

标签: java regex

我在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!");
    }
}

如何添加检查是否至少有一个字符?

无论是在开头还是结尾,或者它与数字之间是否有空格或短划线。必须至少有一个角色。

3 个答案:

答案 0 :(得分:2)

您可以将此正则表达式用于您的问题:

^(?=.*\pL)[\pL\pN]+(?:[ -]+[\pL\pN]+)*$

RegEx Demo

对于Java使用:

final String regex = "^(?=.*\\pL)[\\pL\\pN]+(?:[ -]+[\\pL\\pN]+)*$";

RegEx分手:

  • ^:开始
  • (?=.*\pL):使用前瞻确保我们在某个地方至少有一个unicode字母
  • [\pL\pN]+:匹配一个或多个unicode字母或unicode数字
  • (?::非捕获组开始
    • [ -]+:匹配一个或多个空格或连字符
    • [\pL\pN]+:匹配一个或多个unicode字母或unicode数字
  • )*:非捕获组结束。 *表示此群组中的零个或多个。
  • $:结束

答案 1 :(得分: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