我有一个字段,用户可以在其中搜索某些内容。他们应该能够搜索^[0-9a-zA-Z*]$
。
但是不可能只搜索字符*
(通配符)。必须至少有一个其他字母或数字。 a* or *a or 1* or *1
有效。
因此,有效搜索必须至少有一个数字/字母不等*
。
我认为if / then / else条件应该可以实现。这是我的尝试!
"^(?(?=[*])([0-9a-zA-Z:\]{1,})|([0-9a-zA-Z:\*]*))$"
if character = *
then [0-9a-zA-Z:\]{1,} = user has to enter at least one (or more) characters of the group
else = [0-9a-zA-Z:\*]* = user has to enter 0 or more characters of the group
但它不起作用......
答案 0 :(得分:1)
您可以使用
^[0-9a-zA-Z*]*[0-9a-zA-Z][0-9a-zA-Z*]*$
请参阅regex demo
此正则表达式将匹配零个或多个字母/数字/星号,然后是必填字母或数字,然后是零个或多个字母/数字/星号。
或者,您可以要求字符串至少包含1个字母或数字:
^(?=.*[0-9a-zA-Z])[0-9a-zA-Z*]+$
见another demo。 ^(?=.*[0-9a-zA-Z])
正向前瞻将需要一个字母或数字,在零个或多个任何字符之后只有一个换行符。它也可以写成^(?=.*\p{Alnum})[\p{Alnum}*]+$
(在Java中使用双重转义反斜杠)。
String rx = "(?=.*\\p{Alnum})[\\p{Alnum}*]+";
System.out.println("****".matches(rx)); // FALSE
System.out.println("*a**".matches(rx)); // TRUE