toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
345crew
Δημοσιεύσεις: 41
Εγγραφή: 22 Απρ 2011 19:26
Τοποθεσία: Άνω Καλέσσα, Γάζι, Ηράκλειο Κρήτης
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από 345crew » 28 Ιουν 2011 21:06

Καλησπέρα σε όλους.

Μπαίνω αμέσως στο θέμα.
Σε μια φόρμα αναζήτησης έχω 3 πεδία αυτού του τύπου και με τις js λειτουργίες που βλέπετε:

Κώδικας: Επιλογή όλων

<input type="text" name="keyword2" size="16" maxlength="50" value="" onChange="javascript&#58;this.value=this.value.toUpperCase&#40;&#41;;" />
Όπως είναι ξεκάθαρο μετατρέπονται τα πεζά σε κεφαλαία.

Έχω όμως ένα μεγάλο πρόβλημα. Θέλω οπωσδήποτε να αφαιρώ και τους τόνους από τις λέξεις αλλά δεν μπορώ να βρω λύση. Δεν έχω και πολύ εμπειρία με την Javascript και για αυτό ζητάω βοήθεια από ειδικούς.

Σας ευχαριστώ εκ των προτέρων..!

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από gvre » 28 Ιουν 2011 22:21

Θα σου πρότεινα να κάνεις τους χαρακτήρες κεφαλαίους μέσω css

Κώδικας: Επιλογή όλων

 text-transform&#58; uppercase
και μετά να κάνεις τις τελικές μετατροπές-αντικαταστάσεις στον server με μια str_replace (αν χρησιμοποιείς php).

πχ

Κώδικας: Επιλογή όλων

function ToUpper&#40;$string&#41;
&#123;
        $search  = array&#40;"Ά", "Έ", "Ή", "Ί", "Ϊ", "ΐ", "Ό", "Ύ", "Ϋ", "ΰ", "Ώ"&#41;;
        $replace = array&#40;"Α", "Ε", "Η", "Ι", "Ι", "Ι", "Ο", "Υ", "Υ", "Υ", "Ω"&#41;;
        $string  = mb_strtoupper&#40;$string, "UTF-8"&#41;;

        return str_replace&#40;$search, $replace, $string&#41;;
&#125;

$string = "άέήίϊΐόύϋΰώ";
echo ToUpper&#40;$string&#41;;

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από korgr » 02 Σεπ 2011 12:27

Το συγκεκριμένο εξαφανίζει τα διαλυτικά, θέλει κάποιες επεμβασούλες :)

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από gvre » 02 Σεπ 2011 12:39

korgr έγραψε:Το συγκεκριμένο εξαφανίζει τα διαλυτικά, θέλει κάποιες επεμβασούλες :)
Εσκεμμένα έχει γίνει έτσι. Αν κάποιος τα χρειάζεται, μπορεί να κάνει τις ανάλογες τροποποιήσεις στο $search και $replace.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από cherouvim » 02 Σεπ 2011 13:40

Αν το θέλεις στο client side μόνο:

Κώδικας: Επιλογή όλων

var UpperCaser = &#123;
	MAP&#58; &#123;
			'ά'&#58;'α',
			'έ'&#58;'ε',
			'ό'&#58;'ο',
			'ώ'&#58;'ω',
			'ύ'&#58;'υ',
			'ϋ'&#58;'υ',
			'ΰ'&#58;'υ',
			'ί'&#58;'ι',
			'ϊ'&#58;'ι',
			'ΐ'&#58;'ι',
			'ή'&#58;'η',
			'ς'&#58;'σ'
		&#125;,
	toUpper&#58; function&#40;text&#41; &#123;
		if &#40;!text&#41; return '';
		var i, c;
		for&#40;i=0; i<text.length; i++&#41; &#123;
			c = text&#91;i&#93;;
			if &#40;this.MAP&#91;c&#93;&#41; &#123;
				text = this.replaceAt&#40;text, i, this.MAP&#91;c&#93;&#41;;
			&#125;
		&#125;
		return text.toUpperCase&#40;&#41;;
	&#125;,
	replaceAt&#58; function&#40;text, index, char&#41; &#123;
		return text.substr&#40;0, index&#41; + char + text.substr&#40;index+char.length&#41;;
	&#125;
&#125;
Χρησιμοποιείται έτσι:

Κώδικας: Επιλογή όλων

UpperCaser.toUpper&#40;"αβγ abc ένα δύο τρία"&#41;; // δίνει&#58; ΑΒΓ ABC ΕΝΑ ΔΥΟ ΤΡΙΑ
Τελευταία επεξεργασία από το μέλος cherouvim την 02 Σεπ 2011 14:49, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από korgr » 02 Σεπ 2011 14:28

Δοκίμασε το
UpperCaser.toUpper("Πτολεμαΐδας");

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από cherouvim » 02 Σεπ 2011 14:50

Thanks. Είχα προχειρογράψει το MAP.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από korgr » 02 Σεπ 2011 15:10

Γενικά πιστεύω πως δεν υπάρχει case που πρέπει να φύγουν τα διαλυτικά από τα κεφαλαία. Αλοιώνουν την σημασία και την φωνητική της λέξης...

dpal
Δημοσιεύσεις: 5
Εγγραφή: 26 Νοέμ 2013 15:51

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από dpal » 26 Νοέμ 2013 15:58

Καλησπέρα σε όλους! Στο forum σας γράφω για πρώτη φορά και το ανακάλυψα προσπαθώντας να βρω λύση στο πρόβλημα που αντιμετωπίζω, το οποίο αμέσως θα παραθέσω...
Βασικά προσπαθώ να κάνω το ίδιο ακριβώς πράγμα με τον 345crew, που άνοιξε το συγκεκριμένο θέμα...
Έχω μια html φόρμα, και θέλω, όσα πεδία συμπληρώνει ο χρήστης, να μετατρέπονται αυτομάτως σε κεφαλαία...
Το πετυχαίνω με τον τρόπο που υπόδειξε ο 345crew, δηλαδή

<input name="txtEponymo" size="27" style="float: right; font-family:Tahoma; font-size:10pt" tabindex="5" value=" " onChange="javascript:this.value=this.value.toUpperCase();"/>
Αυτό τα κάνει όντως κεφαλαία. Παραμένει όμως το πρόβλημα με τους τόνους...
Είδα τις λύσεις που στείλατε, αλλά δεν μπορώ με τίποτα να τις ενσωματώσω στη σελίδα μου..δεν ξέρω σε ποιό σημείο να τις βάλω και πώς να τις καλέσω... (δεν ξερω javascript... :roll: )

Αν μπορείτε να με βοηθήσετε θα είμαι υπόχρεη...
Ευχαριστώ πολύ!

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από alou » 26 Νοέμ 2013 17:41

Πριν το </head> στο αρχείο που αναφέρεσαι, θα βάλεις το function μέσα σε script tags:

Κώδικας: Επιλογή όλων

<script type="text/javascript">
var UpperCaser = &#123;
   MAP&#58; &#123;
         'ά'&#58;'α',
         'έ'&#58;'ε',
         'ό'&#58;'ο',
         'ώ'&#58;'ω',
         'ύ'&#58;'υ',
         'ϋ'&#58;'υ',
         'ΰ'&#58;'υ',
         'ί'&#58;'ι',
         'ϊ'&#58;'ι',
         'ΐ'&#58;'ι',
         'ή'&#58;'η',
         'ς'&#58;'σ'
      &#125;,
   toUpper&#58; function&#40;text&#41; &#123;
      if &#40;!text&#41; return '';
      var i, c;
      for&#40;i=0; i<text.length; i++&#41; &#123;
         c = text&#91;i&#93;;
         if &#40;this.MAP&#91;c&#93;&#41; &#123;
            text = this.replaceAt&#40;text, i, this.MAP&#91;c&#93;&#41;;
         &#125;
      &#125;
      return text.toUpperCase&#40;&#41;;
   &#125;,
   replaceAt&#58; function&#40;text, index, char&#41; &#123;
      return text.substr&#40;0, index&#41; + char + text.substr&#40;index+char.length&#41;;
   &#125;
&#125; 
</script>
Μετά θα το χρησιμοποιήσεις κάπως έτσι:

Κώδικας: Επιλογή όλων

<input type="text" name="txtEponymo" size="27" style="float&#58; right; font-family&#58;Tahoma; font-size&#58;10pt" tabindex="5" value=" " onChange="this.value=UpperCaser.toUpper&#40;this.value&#41;;"/> 

Βάζουμε και type= στο input. Εγώ πάντως θα το έκανα onKeyup όχι onChange για να εφαρμόζεται απευθείας η αλλαγή.

dpal
Δημοσιεύσεις: 5
Εγγραφή: 26 Νοέμ 2013 15:51

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από dpal » 28 Νοέμ 2013 10:47

Καλημέρα!!!

Κατ' αρχήν σε ευχαριστώ πάρα μα πάρα πολύ για τον χρόνο που ξόδεψες προκειμένου να μου απαντήσεις.
Αυτά που μου έγραψες ήταν σαφέστατα και τα ενσωμάτωσα στη σελίδα μου, αλλά... και πάλι, ενώ τα κάνει κεφαλαία, αφήνει τους τόνους κανονικά...

Θέλω να ρωτήσω κάτι χαζό... στο σημείο αυτό

Κώδικας: Επιλογή όλων

<input type="text" name="txtEponymo" size="27" style="float&#58; right; font-family&#58;Tahoma; font-size&#58;10pt" tabindex="5" value=" " onChange="this.value=UpperCaser.toUpper&#40;this.value&#41;;"/>

μήπως πρέπει να αντικαταστήσω το (this.value) με το όνομα του πεδίου (name="txtEponymo")?

Και κάτι τελευταίο...έφτιαξα μια νέα σελίδα, καθαρή, η οποία είχε μόνο ένα textbox και στη σελίδα αυτή ενσωμάτωσα τον κώδικα, προκειμένου να διαπιστώσω μήπως υπάρχει κάτι άλλο στη σελίδα μου την αρχική που να δημιουργεί κάποιο πρόβλημα... αλλά και πάλι, και στην καθαρή σελίδα δεν αφαίρεσε τους τόνους από τα κεφαλαία...

ΥΓ. Έβαλα το onKey που μου πρότεινες και φυσάει!!! :lol:

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από alou » 28 Νοέμ 2013 12:48

Ωραία. Είναι φτιαγμένο να αντικαθιστά τους τόνους ΜΟΝΟ από τα μικρά, για να δουλέψει και στα κεφαλαία, πρέπει να μπουν και αυτοί οι χαρακτήρες προς αντικατάσταση:

Κώδικας: Επιλογή όλων

<script type="text/javascript">
var UpperCaser = &#123;
   MAP&#58; &#123;
         'ά'&#58;'α',
         'έ'&#58;'ε',
         'ό'&#58;'ο',
         'ώ'&#58;'ω',
         'ύ'&#58;'υ',
         'ϋ'&#58;'υ',
         'ΰ'&#58;'υ',
         'ί'&#58;'ι',
         'ϊ'&#58;'ι',
         'ΐ'&#58;'ι',
         'ή'&#58;'η',
         'Ά'&#58;'α',
         'Έ'&#58;'ε',
         'Ό'&#58;'ο',
         'Ώ'&#58;'ω',
         'Ύ'&#58;'υ',
         'Ί'&#58;'ι',
         'Ή'&#58;'η'
      &#125;,
   toUpper&#58; function&#40;text&#41; &#123;
      if &#40;!text&#41; return '';
      var i, c;
      for&#40;i=0; i<text.length; i++&#41; &#123;
         c = text&#91;i&#93;;
         if &#40;this.MAP&#91;c&#93;&#41; &#123;
            text = this.replaceAt&#40;text, i, this.MAP&#91;c&#93;&#41;;
         &#125;
      &#125;
      return text.toUpperCase&#40;&#41;;
   &#125;,
   replaceAt&#58; function&#40;text, index, char&#41; &#123;
      return text.substr&#40;0, index&#41; + char + text.substr&#40;index+char.length&#41;;
   &#125;
&#125;
</script> 

και αν ξέχασα κάτι το προσθέτεις.

dpal
Δημοσιεύσεις: 5
Εγγραφή: 26 Νοέμ 2013 15:51

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από dpal » 28 Νοέμ 2013 13:33

Alou σε ευχαριστώ πολύ και πάλι... όμως δεν παίζει ούτε με αυτές τις προσθήκες :(

Αν έχεις λίγο χρόνο, βάλε σε ένα FrontPage αυτό

Κώδικας: Επιλογή όλων

<HTML>

<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1253">
<TITLE>New Page 1</TITLE>
<script type="text/javascript"> 
var UpperCaser = &#123; 
   MAP&#58; &#123; 
         'ά'&#58;'α', 
         'έ'&#58;'ε', 
         'ό'&#58;'ο', 
         'ώ'&#58;'ω', 
         'ύ'&#58;'υ', 
         'ϋ'&#58;'υ', 
         'ΰ'&#58;'υ', 
         'ί'&#58;'ι', 
         'ϊ'&#58;'ι', 
         'ΐ'&#58;'ι', 
         'ή'&#58;'η', 
         'Ά'&#58;'α', 
         'Έ'&#58;'ε', 
         'Ό'&#58;'ο', 
         'Ώ'&#58;'ω', 
         'Ύ'&#58;'υ', 
         'Ί'&#58;'ι', 
         'Η'&#58;'η' 
      &#125;, 
   toUpper&#58; function&#40;text&#41; &#123; 
      if &#40;!text&#41; return ''; 
      var i, c; 
      for&#40;i=0; i<text.length; i++&#41; &#123; 
         c = text&#91;i&#93;; 
         if &#40;this.MAP&#91;c&#93;&#41; &#123; 
            text = this.replaceAt&#40;text, i, this.MAP&#91;c&#93;&#41;; 
         &#125; 
      &#125; 
      return text.toUpperCase&#40;&#41;; 
   &#125;, 
   replaceAt&#58; function&#40;text, index, char&#41; &#123; 
      return text.substr&#40;0, index&#41; + char + text.substr&#40;index+char.length&#41;; 
   &#125; 
&#125; 
</script>
</HEAD>

<BODY>

<FORM METHOD="POST" ACTION="--WEBBOT-SELF--">
	<!--WEBBOT BOT="SaveResults" U-File="fpweb&#58;///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
	<P>
	<INPUT type="text" NAME="T1" SIZE="23" style="float&#58; left; font-family&#58;Tahoma; font-size&#58;10pt" tabindex="4" value="" onKeyup ="this.value=UpperCaser.toUpper&#40;this.value&#41;;"/></P>
</FORM>

</BODY>

</HTML>
είναι η σελίδα η καθαρή που δοκιμάζω τον κώδικα... Μπορείς να δεις αν σε σένα παίζει?

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από alou » 28 Νοέμ 2013 15:28

Μια χαρά παίζει σε μένα και έτσι, αλλά άλλαξε το charset σε utf-8.
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

Βάλε utf8 δήλωση και στο script
<script type="text/javascript" charset="UTF-8">
κάπου εκεί είναι το θέμα σου μάλλον, ανάλογα ίσως και τον browser.

dpal
Δημοσιεύσεις: 5
Εγγραφή: 26 Νοέμ 2013 15:51

toUpperCase χωρίς τόνους για ελληνικούς χαρακτήρες

Δημοσίευση από dpal » 28 Νοέμ 2013 16:01

alou έγραψε:Μια χαρά παίζει σε μένα και έτσι, αλλά άλλαξε το charset σε utf-8.
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

Βάλε utf8 δήλωση και στο script
<script type="text/javascript" charset="UTF-8">
κάπου εκεί είναι το θέμα σου μάλλον, ανάλογα ίσως και τον browser.
Έκανα την αλλαγή με το charset=UTF-8 (αν και στην αρχική μου φόρμα ήταν ήδη έτσι) αλλά και πάλι δεν παίζει...
Είμαι πολύ κοντά ρε γαμώτο αλλά δεν έχω τη γνώση να το φτιάξω, κάποια λεπτομέρεια μου διαφεύγει...

Δεν πειράζει, σε ευχαριστώ πάρα πολύ, ήσουν πολύ αναλυτικός και άμεσος.
:respect:

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες