我知道这对你们来说非常简单,但是我正在挠头找到正则表达式以匹配下面的字符串。尝试了不同的reg ex,但每次都失败了。以下是需要匹配/不匹配的字符串。
S__ATHEESH – not match
S_A_T_HEESH – match
S’_ATHEESH – match
S’’ATHEESH – not match
S-A_THEESH - match
这是要求
a. A name can have the special characters – space, apostrophe, underscore and hyphen.
b. There can be more than 1 special character in a name, but same special character cannot repeat more than once continuously.
c. There should be minimum 2 characters entered in the name field
我在reg ex之下,需要修改
^([a-zA-Z]+[ _'-])*[a-zA-Z]+$
感谢您的帮助。
答案 0 :(得分:1)
您可以使用基于预测的解决方案,例如
/^(?!.*([-_ ’])\1)(?=(?:[^a-z]*[a-z]){2})[-_ ’a-z]+$/i
(?!.*([-_ ’])\1)
检查,没有加倍的特殊字符(?=(?:[^a-z]*[a-z]){2})
检查是否存在至少两个字母^[-_ ’a-z]+$
匹配我使用了case-insenstive修饰符来避免一直写a-zA-Z
。
我不确定’
是正确的连字符,但它是你使用的那个。
答案 1 :(得分:1)
以下正则表达式将满足您的要求:
^(?=.{2})(?:[a-zA-Z]+|([ _’'-])(?!\1))+$
^
断言字符串开头的位置(?=.{2})
至少2个字符[a-zA-Z]+
至少一个字母字符([ _’'-])
在捕获组1中捕获的空格,下划线,魔撇号,撇号或破折号(?!\1)
否定前瞻,刚捕获的内容也不是下一个字符+
尽可能多次$
断言字符串末尾的位置答案 2 :(得分:0)
如果我错了,请纠正我,但你的要求只是针对不包含2个空格(或撇号,下划线或连字符)的字符串。
在RegEx土地上,AFAICT,断言"不是"并不简单,但要求似乎很简单,可以反向处理:
( |__|''|’’)
将匹配您标记为"不匹配",因此您只需要否定布尔匹配结果。
祝你好运。编辑:只是为了确保我没有被误解。我并不是说你不能完全按照操作要求做什么,我只是说否定要求更简单,更容易由其他人维护。