当前位置: 首页 > 知识库问答 >
问题:

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

秦俊
2023-03-14

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

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

不管它是在开头还是结尾,或者它和数字之间是否有空格或破折号。只要至少有一个字符。

共有3个答案

羊舌航
2023-03-14

以下正则表达式做的工作:

(?=.*[[:alpha:]])[[:alnum:]]{1}[[:alnum:] -]*[[:alnum:]]{1}

>

[[:alnum:][1}部分保证字符串以字母数字字符[A-Za-z0-9]开头

[[: alnum:] -]* 字母数字字符、空格和破折号字符可能存在于此处。

[[:alnum:]{1}部分保证字符串以字母数字字符[A-Za-z0-9]结尾

现场观看https://regex101.com/r/V0lesF/1

唐烨煜
2023-03-14

如果我没理解错的话,根据你的陈述,你有以下条件:

  • 至少1个字母
  • 可以包含数字(但仅当满足之前的条件时)
  • 仅当破折号和空格不在字符串的开头或结尾时,才允许使用它们

基于这些条件,以下正则表达式将起作用:

^(?![ -]|\d+$)[[:alnum:] -]+(?<![ -])$

要查看正在使用的正则表达式,请单击此链接
此正则表达式的工作原理如下:

  • 确保字符串不以连字符或空格开头

这将为您提供以下匹配项

Street
Some-Street
Street
1 st street
street 5

正则表达式将无法匹配以下字符串(根据您的示例)

Street 
 Street
Street-
-Street
111

在某些语言(如java)中,负面的后视有时会导致问题。

下面是我以前的正则表达式的一个改编版本,它使用负前瞻而不是负前瞻,以确保字符串不会以连字符或空格结尾。

^(?![ -]|\d+$)(?:(?![ -]$)[\pL\pN -])+$

你可以在这里看到这个正则表达式的使用

勾通
2023-03-14

您可以使用此正则表达式解决您的问题:

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

RegEx演示

Java使用:

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

RegEx分解:

  • <代码>^:开始
 类似资料:
  • 问题内容: 深入研究堆栈溢出后,我发现了一些代码来检查字符串是否为字母数字且长于8个字符。效果很好。现在,如果包含至少2个数字,如何使它返回true?我想我必须在某处添加。 问题答案: 您不需要单独的if条件。单个正则表达式将为您完成所有工作。

  • 我的条件... 字母数字值 只允许使用一个空格或连字符 必须包含至少一个数字 不能以空格或连字符开头或结尾 最少2个字符,最多16个字符,不包括空格/连字符 到现在为止,我准备了正则表达式 它只遗漏了第三点。 测试字符串有效 无效

  • 我在Groovy中使用正则表达式。 我试图用以下规则来公式化正则表达式。 必须正好是17个字符 必须只包含字母和数字 必须包含至少1个alpha和1个数字字符 不能包含字母'I'、'O'或'Q'(大写或小写) 用下面的表达,我想我就快到了。下面的正则表达式似乎满足了要求1、2和3。 我曾尝试添加要求4,但没有成功。谁能帮我一下吗? 谢谢

  • 要匹配至少包含一个字母或数字的字符串,JavaScript正则表达式是什么?这至少需要一个字母数字字符(至少一个字母或至少一个数字)。

  • 问题内容: 我正在寻找Java代码来检查字符串是否为有效的XML。 问题答案: 用正则表达式验证XML是不可能的。XML不是常规语言。 使用XML解析器尝试将字符串解析为XML,或者对照模式(例如DTD或XSD文件)验证XML文档。

  • 问题内容: 我有一个字符串。如何检查字符串是正则表达式还是包含正则表达式还是正常字符串? 问题答案: 您唯一可以做的可靠检查是,如果语法正确的是正则表达式: 但是请注意,即使对于像和这样的字符串,也会导致这种情况,因为从技术上讲,它们是有效的正则表达式。 唯一会返回的情况是不是有效正则表达式的字符串,例如或或。