用java中的regex条件验证Customer Name数组



我有一个验证客户名称的要求,在java中几乎没有条件(仅使用正则表达式验证(。客户名称将在字符串数组中,并传递给一个方法。validateCustomer(String[]名称(应该验证客户名称,并只返回数组中的有效客户名称。验证客户名称的条件如下。

  1. 名称只能包含字母和空格
  2. 每个单词都应该用空格分隔,名称不应该以空格开头或结尾
  3. 名字中每个单词的第一个字符应该是大写字母表
  4. 不允许使用特殊字符
  5. 名称的长度应介于2到75个字符之间

由于条件稍后可以更新,我只需要regex验证并且不使用任何其他方法,如String.length((.

我尝试了一些正则表达式,但由于某些条件而失败。试用样品

[((([A-Z][a-zA-Z])([+\s]?[A-Z][a-zA-Z]*))]{2,75}

您可以使用

^(?=[a-zA-Z\h]{2,75}$)[A-Z][a-zA-Z]*(?:\h+[A-Z][a-zA-Z]*)*$
  • ^字符串开始
  • (?=[a-zA-Z\h]{2,75}$)断言2-75个字符a-zA-Z或水平空间
  • [A-Z][a-zA-Z]*匹配大写字符A-Z和可选字符A-zA-Z
  • (?:\h+[A-Z][a-zA-Z]*)*重复前面加1个+水平空格的内容
  • $字符串末尾

Regex演示

如果你想要一个单独的空间:

^(?=[a-zA-Z ]{2,75}$)[A-Z][a-zA-Z]*(?: [A-Z][a-zA-Z]*)*$

Regex演示

您的正则表达式错误:

┌─ Definitely wrong!! Remove this
│               ┌─ Missing '*' to allow 1 to many words
│               │   ┌ '+' should not be allowed
│               │   │  ┌ Only space allowed, not other whitespace characters
│               │   │  │ ┌ Space is required between words, so remove '?'
│               │   │  │ │              ┌ Missing '*' to allow 1 to many words
│               │   │  │ │              │ ┌ Definitely wrong!! Remove this
│               │   │  │ │              │ │
[((([A-Z][a-zA-Z])([+\s]?[A-Z][a-zA-Z]*))]{2,75}

你想要什么:

┌─ Must be 2-75 characters long (positive lookahead)
│          ┌─ Word must be uppercase letter
│          │    ┌─ followed by 0 or more letters
│          │    │        ┌─ followed by 0 or more words separated by single space
(?=.{2,75})[A-Z][a-zA-Z]*(?: [A-Z][a-zA-Z]*)*

上述正则表达式必须与matches()一起使用。如果要与find()一起使用,则需要^$锚。

上面的正则表达式只允许A-Z字母。要支持像ñ这样的国际字母,请使用以下内容:

(?=.{2,75})p{Lu}p{L}*(?: p{Lu}p{L}*)*

在Java字符串文字中使用时,请记住将加倍。

相关内容

  • 没有找到相关文章

最新更新