プロが教える店舗&オフィスのセキュリティ対策術

全角ハイフンと、全角の「ー」(長音符)を、半角ハイフンに
置換したいと思っています。
対象の文字列は、住所を想定しているので、
たとえばですが

「ワンダービル1ー2ー3」だったら、「ワンダービル」は長音符の
ままで、数字の間だけハイフン変換したいのです。
(英数については事前に半角への変換をかけています)

単純にreplaceではワンダービルがワンダービルになるので、
困っています。
何か良い案がありましたら、ご教授ください。

A 回答 (6件)

数字と数字の間の「ー」をハイフンに変えるだけでは?



<script>
var str="ワンダービル1ー2ー3XXXーYYYー4ーZZZー5ーー6ー7";
alert(str.replace(/([0-9])ー(?=[0-9])/g,'$1-'))
</script>
    • good
    • 0

正規表現を使って出来ませんか?


実行環境がないので試していませんが・・・

var value="ワンダービル1ー2ー3";
value.replace(/[0-9][ー―][0-9]/g, "-");

こんな感じです
    • good
    • 0

「単純にreplace」ではなく「正規表現でreplace」するのはどうでしょうか?



var str = "ワンダービル1ー2ー3"
alert(str.replace(/(\d)ー/g, "$1-"));

//→"ワンダービル1-2-3"
    • good
    • 0

補足: 10-1-2 に対応するように修正は必要!

    • good
    • 1

[イミディエイトウインドウ]



? MyReplace("ワンダービル1ー2ー3")
ワンダービル1-2-3

アルゴリズムらしきものを考えたくなければ力技で・・・。

Public Function MyReplace(ByVal strText As String) As String
  Dim I As Integer
  Dim strI As String

  For I = 1 To 9
    strI = Trim(Str(I))
    strText = Replace(strText, strI & "ー", strI & "-")
  Next I
  MyReplace = strText
End Function

これは VBA ですが・・・。
考え方は同じ。
    • good
    • 0

BASICしかプログラミング言語を使ったことがないですが、考え方としては:



もし 文字列 "ー1" があったら 文字列"-1" に置換しなさい
もし 文字列 "ー2" があったら 文字列"-2" に置換しなさい



というふうにすれば最低9パターン(1-9)手順が必要になりますが確実に数字の前にある「ー」を「-」に置換できるかと思います。
なぜ「ー1」という風にするのかというと、住所を想定しているのであればハイフンが数字の後についたままで終わることはないからです。
もちろん(0を含めて)10パターンでもいいですがハイフンの直後に0が来ることが考えられないので手順を減らすために9パターンとしました。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!