2012-12-10 56 views
-6

如何检查字符串是否符合以下规则?简单Reg表达式

1)字符串不能包含以下字符:

·代字号(〜)

·数字符号(#)

·百分比(%)

·符号(&)

·星号(*)

·括号({})

·反斜杠()

·冒号(:)

·尖括号(<>)

·问号(?)

·斜线(/)

·pipe(|)

·引号(“)

2)字符串不能包含点(的序列)

3)字符串在的结尾必须不包含点和begining

4)字符串必须不以下列词语结束

·。文件

·_files

·文件

·_fichiers

·_bestanden

·_file

·_archivos

·-filer

·_tiedostot

·_pliki

·_soubory

·_elemei

·_ficheiros

·_arquivos

·_dosyalar

·_datoteke

·_fitxers

·_failid

·_fails

·_bylos

·_fajlovi

·_fitxategiak

u能帮助我这个简单的模板? 它应该分开还是分开?

+6

哇............. – Tigran

+0

绝对不是复制粘贴的家庭作业...对吗? –

+0

你需要一个单一的正则表达式吗?每个点本身都是微不足道的,并由任何合理的正则表达式教程覆盖。 –

回答

1

以你的规则轮流:

  1. 有两种可能性。要么你检查给定的人物之一的存在和扭转Match结果:

    @"[~#%&*{}\\:<>?/|""]" 
    

    说明并\来转义,否则不必要逃脱:""只是一个单一的"当内逐字字符串。其他的元字符,如*?|不需要字符类内进行转义。

    如果你有相当的刚性框架,只允许使用一个有效的模式积极的比赛,你可以检查是否有非这些字符,请使用否定的字符类和主持人:

    @"^[^~#%&*{}\\:<>?/|""]*$" 
    

    替代地使用负先行:

    @"^(?!.*[~#%&*{}\\:<>?/|""])" 
    
  2. 再次,这是最简单的具有负的匹配。声明输入为无效,如果你可以搭配:

    @"[.]{2}" 
    

    如果这是不可能的,负先行相当于大概是最简单的:

    @"^(?!.*[.]{2})" 
    
  3. 再次,使用负匹配,使您的生活简单:

    @"^[.]|[.]$" 
    

    或者,你可以使用一个否定的字符类或前瞻:

    @"^[^.].*[^.]$" 
    @"^(?![.]).*$(?<![.])" 
    
  4. 同样的事情,如果你能扭转Match输出,你可以使用:

    @"(?:[.]files|_files|-Dateien|_fichiers|_bestanden|...)$" 
    

    另外,采用回顾后:

    @"$(?<![.]files|_files|-Dateien|_fichiers|_bestanden|...)" 
    

    事实上,你可以包括的第二检验规则3到这一个,如果你喜欢:

    @"$(?<![.]|[.]files|_files|-Dateien|_fichiers|_bestanden|...)" 
    

最后,使用一些环视解决方案,你可以将所有的这些成一个单一的模式:

@"^(?![.]|.*[.]{2})[^~#%&*{}\\:<>?/|""]*$(?<![.]|[.]files|_files|-Dateien|_fichiers|_bestanden|...)" 

Here is a good tutorial你应该考虑通读。

+0

Man ...你是正确的RegEx参考! :-) – 2012-12-10 14:55:48

+0

不是@ -symbol特别用于写入字符串,其中\不被用作转义字符吗? (只有“需要加倍) –

+0

@mr_georg是的,但是正则表达式引擎也需要转义反斜线,这样编译后的字符串仍然包含两个反斜杠,如果我们遗漏了'@',我们需要四个反斜杠代表 –