2016-03-21 28 views
1

文字列を検証するためのjavascript REGEXを作成しようとしています。Java正規表現のJavaScript相当

以下の要件を検証する必要があります。

大文字と小文字の英字(a〜z、A〜Z)(ASCII:65〜90,97〜122)AND/OR数字0〜9(ASCII:48〜57)AND文字 - _〜(ASCII:45,95,126)。ただし、最初の文字でも最後の文字でもありません。キャラクターを持つこともできます。 (ドット、ピリオド、フルストップ)(ASCII:46)ただし、最初または最後の文字ではなく、2回以上連続して出現しないことも条件となります。

私は以下のようにREGEXのJava版を持っています。

^[\ W〜 - ](= [^ \ W _]?)++(\ [\ W *〜 - ]。++)* +(?< = [^ \ W _])$

Javascriptで変換に失敗しました。以下は失敗した試みです。

^[\〜W - ](= [^ \ W _]?)+([\〜W - ]。+) [W \]。)$

それ

"a." "1." "a1." "aB78." "aB78..ab" "aB78,1" "aB78 abc" ".Abc12"

:続く2つのテスト

abc..def 1

無効な文字列の

テストケースに失敗します有効な文字列のための

テストケース:

"a" "1" "a1" "a.1" "abc-def" "a1b2c~3" "012_345"

+0

JSの正規表現を終了保証ほとんどが、他の正規表現と同じです。何を試しましたか? – llamerr

+0

**何をJSに変換しようとしましたか?あなたの失敗の試みを教えてください! – Bergi

+0

非捕捉グループ '?:' –

答えて

3

(?<=[^\W_]) 

を交換し、あなたが思い付くことができます:

^(?!.*\.{2})(?=.*[a-zA-Z0-9]$)[a-zA-Z0-9][-~.\w]*$ 

モードmultilineでは、a demo on regex101.comを参照してください。

説明:

  • ^はそれがライン
  • の始まりだ保証否定先読み - 連続していない2つのドット
  • (* {2、}?!。。) (?=。* [-ZA-Z0-9] $)最後の文字がこれら
  • の一つであることが必要である[-ZA-Z0-9]最初の文字は、これらの
  • [の一つであることが必要です - 〜。\これらのその後(0回以上)の何*]ワット
  • $文字列がここに
+1

これは完全に動作します。正規表現を説明する時間をとってくれてありがとう。 –

+0

@Agilani:何か助けになることを嬉しく思います。 – Jan

+0

1文字と2文字列の式が失敗します。例: 'a a1 1a' –

2

JavaScriptの正規表現にはlookbehindsはありません。幸いにも、とにかくあなたのケースでそれを必要としませんでした。あなたの要件に基づいてちょうど

[^\W_] 
+0

私は同じ結論に達し、' ^(?= [^ \ W _])[\ w〜 - ] +(\。[\ w〜 - ] +)*(。* [a-zA-Z0-9])$ ' –