繁体   English   中英

将字符串(来自用户的输入文本)与正则表达式匹配

[英]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 * $ **等)是错误的。

请告诉我我在哪里做错了? 正则表达式是否有任何问题或检查错误的方式?

^(?:[*]([a-z]|[A-Z]|[0-9]){3,}[*])$

使用锚点^$禁用部分匹配。参见演示。

https://regex101.com/r/tS1hW2/17

字符串*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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM