2016-11-01 4 views
4

修正:、#を、$、%私は英数字の徴候やこれらを1つだけ含まれている必要があり、文字列の正規表現の書き込みを支援する必要がある正規表現

たとえば:?我々はabx12A位okですFSA?#DS

OKではありませんが、私は/[-ZA-Z0-9] [#?$%] {0,1}/ようなもので試してみましたが、その作業はありません。 アイデア おかげのような

+0

多分 '/^[-ZA-Z0-9] +(?:[?#$%] [-ZA-Z0-9] +)?$ /'? –

答えて

3

何か:

^[a-zA-Z0-9]*[#?$%]?[a-zA-Z0-9]*$ 

はトリックを行う必要があります(そして、あなたの正規表現エンジンに応じて、あなたはそれらの特殊文字の一つ以上をエスケープする必要があるかもしれません)。

「アルファ」タイプのクラスには基本的に0以上の値があり、「特殊」タイプのクラスには0または1が続き、0以上の「アルファ」が続きます。

それぞれのキャラクタークラスに含まれているものを適切に調整できますが、これは他のものの海の中のものを得る一般的な方法です。あなたは空の文字列を一致させる必要がある場合は

+0

これはちょうどいい作品です。 –

1

は、あまりにも、あなたはregex demo

詳細を参照してください

^[a-zA-Z0-9]*(?:[#?$%][a-zA-Z0-9]*)?$ 

を使用する必要があります。

  • ^ - 文字列の先頭
  • [a-zA-Z0-9]* - ゼロ以上の英数字
  • (?:[#?$%][a-zA-Z0-9]*)? - の正確に1発生:
      [#?$%]
    • - セット
    • [a-zA-Z0-9]*からチャー - ゼロ以上の英数字
  • $ - 文字列の末尾

注: [A-z] is a common typoに深刻な問題が発生しました。あなたは空の文字列を許可したくない場合は

+*を置き換える:特殊文字であることができれば

^[a-zA-Z0-9]+(?:[#?$%][a-zA-Z0-9]+)?$ 
      ^    ^
1

この

const regex = /^[a-zA-z0-9]*[#?$%]?[a-zA-z0-9]*$/ 
 

 
const perfectInputs = [ 
 
    'abx12A#we', 
 
    'a#', 
 
    '#a', 
 
    'a#a' 
 
] 
 

 
const failedInputs = [ 
 
    'fsa?#ds' 
 
] 
 

 
console.log('=========== test should be success ============') 
 
for (const perfectInput of perfectInputs) { 
 
    const result = regex.test(perfectInput) 
 
    console.log(`test ${perfectInput}: ${result}`) 
 
    console.log() 
 
} 
 

 
console.log('=========== test should be failed ============') 
 
for (const failedInput of failedInputs) { 
 
    const result = regex.test(failedInput) 
 
    console.log(`test ${failedInput}: ${result}`) 
 
    console.log() 
 
}

+2

'A-z' - >' A-Z'です。 – Qwertiy

1

を試してみてください文字列の最後に始まります。先読みを使用することができます:

^(?=[^#?$%]*[#?$%]?[^#?$%]*$)[a-zA-Z0-9#?$%]+$ 
1
/^(?=[^#?$%]*[#?$%]?[^#?$%]*$)[a-zA-Z0-9#?$%]*$/ 
\__________^^^^^^^_________/ -------------------- not more than once 
           \_____________/ ----- other conditions 
関連する問題