繁体   English   中英

正则表达式创建允许,不允许几个字符

[英]Regex creation to allow, disallow few characters

我是正则表达式的新手,我有这个用例:

  1. 允许字符、数字。
  2. 允许零个或一个问号。 (? - 有效,不允许连续问号 (??))。

测试有效

? 测试 - 有效

??test-无效

?test?test - 有效

???测试无效

测试?测试 - 无效

  1. 排除 $ 符号。

[a-zA-Z0-9?] - 似乎这不起作用

谢谢。

试试下面的正则表达式:
^(?!.*\\?\\?)[a-zA-Z0-9?]+$

  1. 首先,我们使用Negetive lookahead - 这允许我们排除任何后跟双问号的字符( Negetive lookahaed不消耗字符)

  2. 由于问号在正则表达式中具有特殊含义( Quantifier — 匹配零次和一次),因此每个问号都使用反斜杠进行转义。

  3. 最后的加号是一个Quantifier ——匹配一次和无限次,尽可能多次

你可以在这里测试

您的描述可以分解为正则表达式:

^(?:\??[a-zA-Z0-9])+\??$

您说的是字符,而您的描述仅显示字母和数字,但可以使用\\w (单词字符)来代替 - 这包括下划线

它在^$之间意味着整个字段必须匹配(没有部分匹配,但如果你想要那些你可以删除它。 +意味着必须至少有一个匹配(所以空字符串不会匹配)。捕获组( (\\??[a-zA-Z0-9]) ) 说我必须看到一个问号后跟字母或只是字母重复多次,最后一个问号允许字符串以单个问号结尾。

你可能不想在这里捕获组,所以我们可以从?:开始,以防止捕获导致:

^(?:\??[a-zA-Z0-9])+\??$

火柴

test  
?test  
?test?test  
test?

不匹配

??test
???test
test??test
test??
<empty string>
?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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