[英]Match a string(input text from user) with regular expression
我有一个要求,其中有一个客户名称文本框,用户可以输入客户名称给搜索客户。 并且条件是用户可以添加外卡搜索*在前面或后面的客户名称。 客户名称最少应为三个字符。 我正在使用Regex来验证用户输入。 现在,如果输入类似于“* aaa *”..我使用以下正则表达式验证此类输入:
[*] {1}([AZ] | [AZ] | [0-9]){3} [*] {1}
代码如下:
var str = "*aaa*"; var patt = new RegExp("[*]{1}([az]|[AZ]|[0-9]){3,}[*]{1}"); var res = patt.test(str); alert(res);
var str = "*aaa***"; var patt = new RegExp("[*]{1}([az]|[AZ]|[0-9]){3,}[*]{1}"); var res = patt.test(str); alert(res);
var str = "*aaa*$$$$"; var patt = new RegExp("[*]{1}([az]|[AZ]|[0-9]){3,}[*]{1}"); var res = patt.test(str); alert(res);
现在输入“* aaa *”res即将成立。 但对于这种类型的输入也“* aaa **”,“* aaa * $”其comimg为真。 这是预期的,因为这些表达式还包含满足正则表达式的部分(* aaa *)。但这些输入(“* aaa **”,* aaa * $ **等)是错误的。
请告诉我我在哪里做错了? 正则表达式是否有任何问题或检查错误的方式?
字符串*aaa*$$$
包含一段*aaa*
,因此它将产生true
; 要匹配整个字符串,您需要在两侧添加锚点。 $
和^
锚分别断言主题的开始和结束。
此外,通过使用字符类技巧,您可以简单地使用表达式。 \\w
由[0-9a-zA-Z_]
,我们只是不需要下划线,所以我们可以使用与\\w
(即\\W
)和下划线相反的负字符类; 我同意,它需要一些精神力量;-)
var str = "*aaa*$"; var patt = /^\\*[^\\W_]{3,}\\*$/; var res = patt.test(str); alert(res); // false
或者,您可以将所有角色类合并为一个,如下所示:
[A-Za-z0-9]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.