1

この文字セット

[^\/:] // all characters except / or :

jslint bcごとに弱いです。このSO投稿ごとに使用できない文字ではなく、使用できる文字を指定する必要があります。

これは、次のような単純な非実稼働レベルのドメインテスター用です。

domain:         /:\/\/(www\.)?([^\/:]+)/,

私はこれについてどう考えるかについての方向性を探しています。投稿には、無数のUnicode文字を許可することは良いことではないと記載されています...これを少し良く書くための計画を立てるにはどうすればよいですか?

私は自分のドメインチェッカーの完全性には関心がありません(これは単なるプロトタイプです)...私はreg-exeを別の方法で書く方法に関心があります。

4

4 に答える 4

2

http://en.wikipedia.org/wiki/Domain_name#Internationalized_domain_namesによると

ドメインネームシステムで許可されている文字セットはASCIIに基づいています

およびhttp://www.netregister.biz/faqit.htm#1による

ドメインに名前を付けるには、0〜9の任意の文字、数字、および記号「-」を使用できます[最初の文字が「-」でない限り]

ドメインが.somethingで終わる必要があることを考えると、あなたは探しています

([a-zA-Z0-9][a-zA-Z0-9-]*\.)+[a-zA-Z0-9][a-zA-Z0-9-]*
于 2012-08-23T22:31:18.613 に答える
1

これはGoogleにとって素晴らしい質問です、ご存知のとおり...しかし、くちばしを濡らすためだけに:Matthew O'Riordanは、プロトコルの有無にかかわらず、mathcesがリンクするような正規表現を作成しました。

彼のブログ投稿へのリンクは次のとおりです

しかし、将来の参考のために、ここの投稿からの正規表現も提供しましょう:

/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/

そして、ブログライターのマシュー自身によってうまく分解されたように:

(
 ( # brackets covering match for protocol (optional) and domain
  ([A-Za-z]{3,9}:(?:\/\/)?)   # match protocol, allow in format http:// or mailto:
  (?:[\-;:&=\+\$,\w]+@)?   # allow something@ for email addresses
  [A-Za-z0-9\.\-]+   # anything looking at all like a domain, non-unicode domains
  | # or instead of above
  (?:www\.|[\-;:&=\+\$,\w]+@) # starting with something@ or www.
  [A-Za-z0-9\.\-]+   # anything looking at all like a domain
 )
 ( # brackets covering match for path, query string and anchor
  (?:\/[\+~%\/\.\w\-]*)  # allow optional /path
  ?\??(?:[\-\+=&;%@\.\w]*)  # allow optional query string starting with ? 
  #?(?:[\.\!\/\\\w]*) # allow optional anchor #anchor 
 )? # make URL suffix optional
)

あなたの特定の例はどうですか

しかし、URLドメインを作成する場合、ネガティブは[^\/:]単純に次のようになります。

[-0-9a-zA-Z_.]

そして、それは//の後と最初の/の前のすべてに一致するはずです。しかし、URLがスラッシュで終わっていない場合はどうなりますか?その場合はどうしますか?

上位の正規表現(簡略化)は、負の文字セットと同じように1つの文字にのみ一致します。したがって、これは、使用している完全な正規表現のネガティブセットを置き換えるだけです。

于 2012-08-23T22:24:45.220 に答える
1

「使えない文字ではなく、使える文字を指定するべき」

いいえ、それはナンセンスです。JSLintがJSLintであるだけです。

正規表現を見る[^\/:]と、それが何をしているのかがすぐにわかります。許可されている可能性のあるすべての文字をリストしようとすると、結果の正規表現は非常に読みにくくなり、誤って一部の文字を含めるのを忘れがちになります。

許可された文字の特定のセットがある場合は、問題ありません。それらをリストしてください。これは、考えられるすべての無効な文字をリストするよりも簡単で信頼性があります。

ただし、無効な文字の特定のセットがある場合は、[^]構文が適切な方法です。

于 2012-08-23T22:25:08.177 に答える
1

ここにあなたが持つことができる文字の正規表現があります:

mycharactersarecool[^shouldnothavethesechars](oneoftwooptions|anotheroption)

これはあなたが話していることですか?

于 2012-08-23T22:27:43.223 に答える